poj 3249 DAG求最短路
来源:互联网 发布:信用社支票打印软件 编辑:程序博客网 时间:2024/05/23 22:14
给出一张有向图,每个点有点权,现要从一条入度为0的点到一个出度为0的点,问最大点权和
用拓扑排序的顺序+一个dp数组更新最大路径值
#include <stdio.h>#include <string.h>#include<algorithm>#include<queue>using namespace std;#define ll long longstruct node{ int u,next;}e[1111111];int top,head[1111111],deg[1111111],a[1111111],dp[1111111],out[1111111];void add(int u,int v){ e[top].u=v; e[top].next=head[u]; head[u]=top++;}int main(){ int n,m; while(~scanf("%d%d",&n,&m)) { for(int i=1;i<=n;i++) { scanf("%d",&a[i]); } memset(head,-1,sizeof(head)); memset(deg,0,sizeof(deg)); memset(out,0,sizeof(out)); top=0; for(int i=0;i<m;i++) { int a,b; scanf("%d%d",&a,&b); add(a,b); deg[b]++; out[a]++; } queue<int>q; memset(dp,0,sizeof(dp)); for(int i=1;i<=n;i++) { if(!deg[i]) { dp[i]=a[i]; } else dp[i]=-0x3f3f3f3f; } for(int i=1;i<=n;i++) { if(!deg[i]) { q.push(i); } } while(!q.empty()) { int f=q.front(); q.pop(); for(int i=head[f];i!=-1;i=e[i].next) { int u=e[i].u; dp[u]=max(dp[f]+a[u],dp[u]); // max1=max(max1,dp[u]); //printf("%d %d %d ....\n",f,u,dp[u]); deg[u]--; if(!deg[u]) { q.push(u); } } } int max1=-0x3f3f3f3f; for(int i=1;i<=n;i++) { if(!out[i]) max1=max(dp[i],max1); } printf("%d\n",max1); }}
阅读全文
1 0
- poj 3249 DAG求最短路
- poj 3249 DAG上的最短路问题
- DAG最短路算法
- DAG之最短路
- DAG之最短路
- POJ 3249 Test for Job【DAG图上的最短路问题】
- poj 1125 (求起点的最短路)
- poj 2215 bfs求最短路
- poj 1062 dijkstra求最短路变形
- POJ 3170(bfs求最短路)
- poj 1125 floyd算法求最短路
- POJ 3249 Test for Job DAG图单源最短路
- POJ 3114 - Countries in War(强连通分量+缩点+拓扑排序+DAG最短路)
- DAG(递归实现最短路)
- DAG上的最短路--uva103
- DP<DAG模型的最短路>
- poj 1135 Domino Effect 用diskla求最短路
- POJ 3615 floyd 求任意起点终点的最短路
- Xen使用命令行创建虚拟机
- GJJ的日常之暴富梦
- 数据库(第一范式,第二范式,第三范式)
- WPF中RouteEvent
- 高斯消元总结
- poj 3249 DAG求最短路
- 笔试题-计算时间戳
- poj3255 Roadblocks (次短路)
- HDU 6143 Killer Names
- jupyter
- NYOJ 814 又见拦截导弹
- Compile Error出现的原因
- Android触摸屏突然没反应了
- 前端优化系列之DNS预解析