codeforces 721C journey(动态规划+拓扑排序)
来源:互联网 发布:可以做生意的软件 编辑:程序博客网 时间:2024/04/30 10:45
当时比赛的时候没写出来,然后看了网上大牛的博客才明白的,也通过这个题明白了前向星,拓扑排序,收获挺大的。
大牛的博客:http://www.cnblogs.com/ziliuziliu/p/5931553.html
附上自己的代码,有注释,按我自己理解写的.
#include<bits/stdc++.h>#define INF 0x3f3f3f3fusing namespace std;int n,m,t,head[5005],cnt,dp[5005][5005],pre[5005][5005],d[5005],path[5005]; //dp[i][j]表示经过j个节点(包含i点)到达i所耗费的最少时间struct node{ int to; //边的终点 int next; //下一条相同起点的边的序号 int w; //边的权值}edge[5005];void add(int x,int y,int z) //用前向星存图{ edge[cnt].to=y; edge[cnt].next=head[x]; edge[cnt].w=z; head[x]=cnt++;}queue<int>q;void bfs() //记忆化搜索{ dp[1][1]=0; bool visit[5005]; for(int i=1;i<=n;i++) { if(!d[i]) { visit[i]=true; q.push(i); } } while(!q.empty()) //bfs { int top=q.front(); q.pop(); for(int i=head[top];i!=-1;i=edge[i].next) { int v=edge[i].to; if(d[v]) { d[v]--; for(int j=2;j<=n;j++) { if(dp[v][j]>dp[top][j-1]+edge[i].w) { dp[v][j]=dp[top][j-1]+edge[i].w; pre[v][j]=top; //保存路径,记录与v相连的结点,即从1到v的所有结点中,第j-1个结点 } } } if(!d[v]) q.push(v); //如果d[v]为0,则以结点v为终点的边全部遍历完,则开始遍历以v为起点的边 } }}int main(){ int a,b,c,max1=0,num=0,x; memset(head,-1,sizeof(head)); cnt=0; scanf("%d%d%d",&n,&m,&t); for(int i=1;i<=m;i++) { scanf("%d%d%d",&a,&b,&c); add(a,b,c); d[b]++; } for(int i=1;i<=n;i++) { for(int j=1;j<=n;j++) { dp[i][j]=INF; } } bfs(); for(int i=n;i>=1;i--) { if(dp[n][i]<=t) //寻找到达n的所有路径中,在不超过时间t的情况下,经过结点最多的一条路径 { max1=i; break; } } printf("%d\n",max1); x=n; while(x!=1) //保存这条路径 { path[++num]=x; x=pre[x][max1]; max1--; } path[++num]=1; for(int i=num;i>=1;i--) printf("%d ",path[i]); return 0;}
0 0
- codeforces 721C journey(动态规划+拓扑排序)
- codeforces 721C. Journey(dp+拓扑)
- Codeforces Round #374 (Div. 2) C. Journey 拓扑排序+dp
- Codeforces #374(Div.2)C. Journey【DAG图上的拓扑排序+Dp】
- Codeforces 721C. Journey
- codeforces 721 Journey (拓扑序+DP)
- CodeForces 721C Journey(DP)
- CodeForces 510C (拓扑排序)
- codeforces 501C (拓扑排序另类)
- CodeForces - 510C(拓扑排序)
- 【10.58%】【codeforces 721C】Journey
- codeforces 510c 拓扑排序
- Test for Job (动态规划 + 拓扑排序)
- Test for Job (动态规划 + 拓扑排序)
- POJ 3249 拓扑排序+动态规划
- Codeforces 721C. Journey(DAG上的DP)
- Codeforces 721C Journey (简单dp,dfs)
- Codeforces-721C:Journey(最短路上的DP)
- Jquery - 页面刷新滚动条自动滚到最底下
- iOS开发 NSNotificationCenter 通知的使用方法
- C语言知识点-4
- 洛谷 P1069 细胞分裂
- av_reduce
- codeforces 721C journey(动态规划+拓扑排序)
- PE文件本地DLL注入实现
- JavaSE:1min讲解引用类型参数(2)-抽象类
- Android Studio ,项目开发Bug大全
- Window 学习笔记(一)
- 设计模式小结
- Bitmap【Android】
- asp.net下微信网页授权
- 项目中的坑 总结