pku3249 Test for Job
2010-03-22 22:44
260 查看
题目链接:http://acm.pku.edu.cn/JudgeOnline/problem?id=3249
题意简述:给出一个有向无环图,每个顶点都有一个权值。求一条从入度为0的顶点到出度为0的顶点的一条路径,路径上所有顶点权值和最大。
解题思路:top+dp。在hdu的一个比赛中看到一个类似的题目,以前听队友提到过这个题目,然后比赛的时候自己写完1y。但在这改了一下后wa无敌,发现自己忽略了好多trick:统计最大值时一定只能统计出度为0的,还有刚才是初始dp的时候不能直接初始为那点的权值(具体怎么初始,就很容易了),最后一点强烈建议自己以后搞top要用链表的形式(就因为不是搞链表的形式我也wa了好多次)。
代码:
题意简述:给出一个有向无环图,每个顶点都有一个权值。求一条从入度为0的顶点到出度为0的顶点的一条路径,路径上所有顶点权值和最大。
解题思路:top+dp。在hdu的一个比赛中看到一个类似的题目,以前听队友提到过这个题目,然后比赛的时候自己写完1y。但在这改了一下后wa无敌,发现自己忽略了好多trick:统计最大值时一定只能统计出度为0的,还有刚才是初始dp的时候不能直接初始为那点的权值(具体怎么初始,就很容易了),最后一点强烈建议自己以后搞top要用链表的形式(就因为不是搞链表的形式我也wa了好多次)。
代码:
#include<stdio.h> using namespace std; const int Len=100005; #define max(a,b) (a>b?a:b) struct node{ int degr; int numC; int tt; int next[150]; //开始开105时,不是re,而是wa,改成150ac。。。 }T[Len]; long long dp[Len]; bool f[Len]; bool ff[Len]; int main() { int n,m; while(scanf("%d%d",&n,&m)!=EOF) { for(int i=1;i<=n;++i) { T[i].numC=T[i].degr=0; f[i]=true; //标记初度 ff[i]=true; //标记入度 int nt; scanf("%d",&nt); T[i].tt=nt; } for(int j=1;j<=m;++j) { int s,e; scanf("%d%d",&s,&e); T[s].next[++T[s].numC]=e; f[s]=false; ff[e]=false; ++T[e].degr; } for(int i=1;i<=n;++i) if(ff[i]) dp[i]=T[i].tt; else dp[i]=-2000000001; int stack[Len]; int top; int tnum; tnum=0; top=0; for(int i=1;i<=n;++i) if(T[i].degr==0) { ++tnum; stack[++top]=i; } while(top) { int temp=stack[top--]; for(int i=1;i<=T[temp].numC;++i) { T[T[temp].next[i]].degr--; if(T[T[temp].next[i]].degr==0) stack[++top]=T[temp].next[i]; dp[T[temp].next[i]]=max(dp[T[temp].next[i]],T[T[temp].next[i]].tt+dp[temp]); } } long long ans=-2000000001; for(int i=1;i<=n;++i) if(f[i]) ans=max(dp[i],ans); printf("%lld/n",ans); } return 0; }
相关文章推荐
- PKU 3249 Test for Job
- POJ - 3249 Test for Job (DAG+topsort)
- POJ - 3249 Test for Job (DAG+topsort)
- Test for Job (poj 3249 记忆化搜索)
- POJ 3249-Test for Job(拓扑排序&&DP)
- POJ 3249 Test for Job (dfs + dp)
- poj 3249 Test for Job
- POJ 3249 Test for Job 拓扑排序+DP
- POJ 3249 Test for Job【SPFA】
- poj3249 Test for Job --- 拓扑排序
- POJ 3249 Test for Job DAG图上的单源最短路径
- POJ 3249 Test for Job(拓扑排序+dp)
- HDU 3249 Test for job (有向无环图上的最长路,DP)
- POJ-3249 Test for Job DAG最短路
- POJ_3249 Test for Job(拓扑)
- POJ 3249 Test for Job 解题报告 DP
- POJ 3249 Test for Job(DAG上的dp + 记忆化搜索)
- POJ 3249 Test for Job
- poj 3249 Test for Job
- POJ 3249 Test for Job