Test for Job(poj3249 拓扑+动态规划)
2015-09-18 10:52
239 查看
题目链接
题意:从任意一个源点到目标点, 有向无环, 求路径的最大权值和,权值有负数。
思路: 我的思路复杂了一点,用了两个vector分别保存岀度和入度, 当缩到当前这个点,它的所有前驱的值已经确定,所以选择最大的值叠加到当前点。动归方程:
题意:从任意一个源点到目标点, 有向无环, 求路径的最大权值和,权值有负数。
思路: 我的思路复杂了一点,用了两个vector分别保存岀度和入度, 当缩到当前这个点,它的所有前驱的值已经确定,所以选择最大的值叠加到当前点。动归方程:
d[i] = max(d[i], d[vec[i][j]]+v[i]);//d[i]是i点的最大权值和, vec[i][j]是i的某一个前驱,选择是否叠加这个点。 注意一点:权值有负, 所以ans初始值为负无穷。
#include <iostream> #include <cstring> #include <cstdio> #include <algorithm> #include <string> #include <cmath> #include <queue> #include <set> #include <stack> #include <fstream> #include <vector> using namespace std; int v[100010]; int in[100010]; int d[100010]; vector <int> vec[100010]; vector <int> tmp[100010]; int main() { int n, m; int s, e; while(scanf("%d%d", &n, &m) == 2) { queue<int> que; memset(in, 0, sizeof(in)); int ans = -0x7ffffff; for(int i = 1; i <= n; i++) { vec[i].clear(); tmp[i].clear(); scanf("%d", &v[i]); } for(int i = 0; i < m; i++) { scanf("%d%d", &s, &e); vec[e].push_back(s); tmp[s].push_back(e); in[e]++; } for(int i = 1; i <= n; i++) { if(in[i] == 0) { d[i] = v[i]; que.push(i); } else d[i] = -0xfffffff; } while(!que.empty()) { int i = que.front(); que.pop(); for(int j = 0; j < vec[i].size(); j++) { d[i] = max(d[i], d[vec[i][j]]+v[i]); } for(int j = 0; j < tmp[i].size(); j++) { in[tmp[i][j]]--; if(in[tmp[i][j]] == 0) { que.push(tmp[i][j]); } } } for(int i = 1; i <= n; i++) { if(tmp[i].size() == 0) { ans = max(ans, d[i]); } } cout << ans << endl; } return 0; }
相关文章推荐
- 在 MyEclipse/Eclipse 中如何查看某个文件的历史记录
- android快速开发工具SelectorChapek安装使用教程
- 转 在Spring中定义了5中不同的事务隔离级别。
- Linux使用用户密钥ssh主机
- Appium junit测试之定义case执行优先级
- 怎么设置远程ASP网页和MYSQL数据库的连接
- Unexpected exception 'Cannot run program ... error=2, No such file or directory' ... adb'
- lintcode——在O(1)时间复杂度删除链表节点(链表)
- ASP.NET Web API实现微信公众平台开发(一)服务器验证
- Sublime Text 3 安装Package Control
- 照相机 相册 以及相册的使用
- 趣味Python入门(一):初识Python
- 在ubuntu14.04环境下搭建hive-0.12.0 64位系统
- 最小的k个数
- android studio 1.32版本 new module窗口看不全的bug
- 小议:ADFS的Token-Signing Certificate不被信任的解决方案
- HDU 5438 Ponds (拓扑排序+DFS)2015 ACM/ICPC Asia Regional Changchun Online
- 计算机中的字符编码详解
- javascript命名规范
- Mongodb怎样将查询结果放到变量里,并打印出来