UVA11478 Halum
来源:互联网 发布:广点通优化思路 编辑:程序博客网 时间:2024/05/21 17:37
2分法,对于最后能否达到x应满足每一对的:
edge(u, v) + sum(u) - sum(v) >= x
-->sum(v) <= sum(u) + (edge(u, v) - x)
-->d[v] <= d[u] + edge0(u, v)
-->模拟建图,判断是否有负环
注意:题目的目标是所有边的权值都大于0而不是非负
#include <stdio.h>#include <string.h>#include <algorithm>#include <vector>#include <queue>using namespace std;const int maxn = 500+5;class Edge{ public: int pos, dist; Edge(int pos, int dist) { this->pos = pos; this->dist = dist; }};vector<Edge> adj[maxn];bool inq[maxn];int d[maxn], cnt[maxn], n, m, up;void Init(){ for(int i = 1; i <= n; i++) adj[i].clear(); int a, b, c; up = 0; for(int i = 1; i <= m; i++) { scanf("%d%d%d", &a, &b, &c); adj[a].push_back(Edge(b, c)); up = max(up, c); }}bool Bellman_Ford(){ queue<int> myQue; for(int i = 1; i <= n; i++) { myQue.push(i); inq[i] = true; d[i] = 0; cnt[i] = 0; } while(!myQue.empty()) { int u = myQue.front(); myQue.pop(); inq[u] = false; for(vector<Edge>::iterator it = adj[u].begin(); it != adj[u].end(); it++) { int v = it->pos; if(d[v] > d[u] + it->dist) { d[v] = d[u] + it->dist; if(!inq[v]) { myQue.push(v); inq[v] = true; if(++cnt[v] > n) return true;//有负环 } } } } return false;}bool Test(int M){ for(int i = 1; i <= n; i++) for(vector<Edge>::iterator it = adj[i].begin(); it != adj[i].end(); it++) it->dist -= M; bool flag = Bellman_Ford(); for(int i = 1; i <= n; i++) for(vector<Edge>::iterator it = adj[i].begin(); it != adj[i].end(); it++) it->dist += M; return flag;}void Solve(){ if(!Test(up+1)) printf("Infinite\n"); else if(Test(1)) printf("No Solution\n"); else { int L = 1, R = up + 1; while(L < R - 1) { int M = L + (R - L) / 2; if(!Test(M)) L = M; else R = M; } printf("%d\n", L); }}int main(){ while(scanf("%d%d", &n, &m) != EOF) { Init(); Solve(); } return 0;}
- UVA11478 Halum
- uva11478 Halum
- uva11478 - Halum
- UVa11478 - Halum
- UVA11478 Halum (差分约束)
- UVa11478 - Halum(差分约束)
- 例题5.16 Halum操作 UVa11478
- uva11478 - Halum 二分+差分约束
- uva11478 Halum【二分+差分约束】
- UVA11478-Halum(BellmanFord + 差分约束)
- UVA11478 [Halum] 二分答案+SPFA差分约束系统
- uva11478
- UVA11478 Halum 解题报告【图论】【二分答案】【SPFA】【差分约束系统】
- UVA11478 二分
- uva11478(spfa求负环)
- uva11478差分约束
- uva 11478 Halum
- uva 11478 - Halum(BellmanFold)
- Yii: 在CGridView控件中使用数组做为数据源
- stl内的remove_if函数和remove函数和list类的remove函数简单例子
- CString/string /Char转化、Vector、分割、New、Malloc、Memset、Memcpy、Strcpy、static
- 中国个人站长上的四个大当
- html5下的鼠标滚轮事件
- UVA11478 Halum
- python:百度贴吧,统计ID回复数的爬虫,附源码
- 习题3-3,乘积的末三位
- 个人站长不要把理想和青春赌到网站上,写得太对了!
- 【CodeBlocks 非官方翻译】问题汇总
- linux中查看java进程
- RGB彩色空间的不同转换公式
- POJ 2262 ----Goldbach's Conjecture
- 【CodeBlocks 非官方翻译】国际化协作网站——Transifex 使用帮助