poj 3249 Test for Job (拓扑排序)
来源:互联网 发布:windows端口及端口号 编辑:程序博客网 时间:2024/06/05 11:03
题目链接:http://poj.org/problem?id=3249
给出每个点的价值以及有向边,然后求所有路径中,价值和最大的路径,问最大价值为多少。
路径要求从入度为0的点出发,出度为0的点停止,价值可能为负值。
直接用拓扑排序,并不断向后累加每个点在价值,最后找出度为0的点的价值就可以了。
#include <cstdio>#include <queue>#include <vector>using namespace std;const int maxn = 100005;const int oo = 1 << 31;vector<int> G[maxn];int weight[maxn];int sumw[maxn];int indeg[maxn];int outdeg[maxn];void topo(int n);int main() { int n, m, from, to;// freopen("1.in", "r", stdin); while (scanf("%d%d", &n, &m) != EOF) { for (int i = 1; i <= n; i ++) { scanf("%d", weight + i); } for (int i = 0; i < m; i ++) { scanf("%d%d", &from, &to); G[from].push_back(to); outdeg[from] ++; indeg[to] ++; } topo(n); for (int i = 1; i <= n; i ++) { G[i].clear(); indeg[i] = outdeg[i] = 0; } } return 0;}void topo(int n) { queue<int> que; for (int i = 1; i <= n; i ++) { if(indeg[i] == 0) { que.push(i); sumw[i] =weight[i]; } else { sumw[i] = -oo; } } while (!que.empty()) { int cur = que.front(); que.pop(); for (int i = 0, qs = G[cur].size(); i < qs; i ++) { int to = G[cur][i]; sumw[to] = max(sumw[to], sumw[cur] + weight[to]); indeg[to] --; if(indeg[to] == 0) { que.push(to); } } } int ans = -oo; for (int i = 1; i <= n; i ++) { if(outdeg[i] == 0) { if(ans < sumw[i]) { ans = sumw[i]; } } sumw[i] = -oo; } printf("%d\n", ans);}
0 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(拓扑排序&&DP)
- poj 3249 Test for Job 拓扑排序 dp
- POJ 3249 Test for Job 拓扑图DP
- poj3249 Test for Job --- 拓扑排序
- POJ3249 Test for Job(拓扑排序+dp)
- POJ 3249 Test For Job
- POJ 3249 Test for Job
- poj 3249 Test for Job
- POJ 3249 Test for Job
- POJ 3249 Test for Job
- poj 3249 Test for Job
- POJ 3249 Test for Job
- Test for Job (动态规划 + 拓扑排序)
- Test for Job (动态规划 + 拓扑排序)
- 作业成本法
- DigCSDN介绍首页
- win7下树莓派安装使用win10
- SQL优化原则
- LayoutInflater的使用
- poj 3249 Test for Job (拓扑排序)
- [leetcode][javascript]Remove Linked List Elements
- 0x3f3f3f3f...编程中无穷大常量的设置技巧
- CocoaPods安装和使用教程
- 系统调用(二)
- Lua 与C/C++ 交互系列:Light userdata翻译
- 深入N皇后问题的两个最高效算法的详解[装载]
- Python入门&题目的思考
- MongoDB 备份/还原