POJ 3249 Test for Job
2017-03-14 20:03
357 查看
POJ 3249 Test for Job
dfs DAG最长路
传送门:HustOJ传送门:POJ
题意
DAG最长路。思路
这篇讲的挺好,有三种方法。我写的是dfs。
代码
神他妈的cin/cout过不了#include <cstdio> #include <cstdlib> //#include <iostream> #include <algorithm> #include <string> #include <cstring> #include <vector> #include <cmath> #include <queue> #include <stack> #include <map> //#define _ ios_base::sync_with_stdio(0),cin.tie(0) #define M(a,b) memset(a,b,sizeof(a)) using namespace std; const int MAXN=100005; const int oo=0x3f3f3f3f; typedef long long LL; const LL loo=4223372036854775807ll; typedef long double LB; const LL mod=1e9+7; int val[MAXN]; vector<int> G[MAXN]; LL res[MAXN]; LL dfs(int n) { if(res !=-loo) return res ; if(G .size()==0) return res =val ; for(int i=0;i<G .size();i++) { int t=G [i]; res =max(res , (LL)val +dfs(t)); } return res ; } int indegree[MAXN]; int main() { //_; int n; while(scanf("%d",&n)==1) { for(int i=0;i<MAXN;i++) G[i].clear(); M(indegree, 0); int e=0; for(int i=0;i<MAXN;i++) res[i]=-loo; int m;scanf("%d", &m); for(int i=1;i<=n;i++) scanf("%d", &(val[i])); for(int i=0;i<m;i++) { int a, b;scanf("%d%d", &a, &b); G[a].push_back(b); indegree[b]++; } LL ttt=-loo; for(int i=1;i<=n;i++) { if(indegree[i]==0) ttt=max(ttt, dfs(i)); } printf("%lld\n", ttt); } return 0; }
相关文章推荐
- POJ 3249 Test for Job(拓扑排序)
- poj 3249 Test for Job
- POJ 3249-Test for Job(拓扑排序&&DP)
- POJ 3249 Test for Job 拓扑图DP
- POJ 3249 Test for Job【SPFA】
- POJ_3249 Test for Job(拓扑)
- POJ 3249 Test for Job(拓扑排序+dp)
- POJ3249 Test for Job(记忆化搜索)
- poj 3249 Test for Job 图上dp(记忆化搜索)
- poj&nbsp;3249&nbsp;Test&nbsp;for&nbsp;Job&nbsp;dp(动态规…
- poj 3249 Test for Job 最长路
- poj 3249 Test for Job (记忆化深搜)
- poj3249 Test for Job --- 拓扑排序
- POJ 3249 Test for Job
- POJ 3249 Test for Job
- POJ 3249 Test for Job(记忆化搜索)
- POJ 3249 Test for Job 解题报告 DP
- POJ - 3249 Test for Job (DAG+topsort)
- POJ 3249 Test for Job (记忆化搜索 好题)
- POJ 3249 Test for Job