UVa 11478 Halum BellmanFord判负权环
来源:互联网 发布:模具分析软件 编辑:程序博客网 时间:2024/05/21 07:56
题目大意:
给定一个有向图, 每条边都有一个权值, 每次你可以选择一个点v和一个整数d, 使得所有以v为终点的边权值减少d, 以v为起点的边权值增加d, 要使得边权最小的的边尽量大且非负。
代码:
#include<bits/stdc++.h>using namespace std;const int maxn = 500 + 10; const int maxm = 2700 + 10;struct BellmanFrod { int n, m; bool in_q[maxn]; int dis[maxn], pre[maxn], cnt[maxn]; int Begin[maxn], W[maxm], To[maxm], Next[maxm], E; void init(int n) { this->n = n; E = 0; memset(Begin, 0, sizeof(Begin)); } void AddEdge(int from, int to, int dist) { To[++E] = to; Next[E] = Begin[from]; W[E] = dist; Begin[from] = E; } bool negativeCycle() { queue<int> q; memset(cnt, 0, sizeof(cnt)); memset(in_q, false, sizeof(in_q)); for(int i=0; i<n; i++) dis[i] = 0, q.push(i); while(!q.empty()) { int u = q.front(); q.pop(); in_q[u] = false; for(int i=Begin[u]; i; i=Next[i]) { int v = To[i]; if(dis[v] > dis[u] + W[i]) { dis[v] = dis[u] + W[i]; pre[v] = u; if(!in_q[v]) { in_q[v] = true; q.push(v); if(++cnt[v] > n) return true; } } } }return false; }}Bel;bool check(int mid) { for(int i=1; i<=Bel.E; i++) Bel.W[i] -= mid; bool res = Bel.negativeCycle(); for(int i=1; i<=Bel.E; i++) Bel.W[i] += mid; return !res;}int n, m, u, v, w;int main() {#ifndef ONLINE_JUDGE freopen("data.txt", "r", stdin); freopen("ans.txt", "w", stdout);#endif while(scanf("%d%d", &n, &m) == 2) { Bel.init(n); int L = 1, R = 0; for(int i=0; i<m; i++) { scanf("%d%d%d", &u, &v, &w); u--, v--; Bel.AddEdge(u, v, w); R = max(R, w); } if(check(R+1)) puts("Infinite"); else if(!check(1)) puts("No Solution"); else { int ans = 1; while(L <= R) { int M = L + (R-L) / 2; if(check(M)) ans = M, L = M + 1; else R = M - 1; } printf("%d\n", ans); } } return 0;}
0 0
- UVa 11478 Halum BellmanFord判负权环
- uva 11478 Halum
- uva 11478 - Halum(BellmanFold)
- UVA 11478 - Halum 差分约束
- UVA - 11478 Halum(差分约束系统)
- UVA 11478 Halum(差分约束)
- UVA 11478 Halum 最小差分系统
- UVA11478-Halum(BellmanFord + 差分约束)
- UVa 11090 Going in Cycle! BellmanFord 判负权环
- UVA 11478 Halum(差分约束,5级)
- UVA 11478 Halum(二分 + 差分约束)
- UVA - 11478 Halum (最短路应用+二分)
- uva 11478 Halum(图论-差分约束)
- UVA 11478 - Halum(差分约束+最短路)
- uva 11478 Halum (差分约束+二分+SPFA判负环)
- UVA 11478 Halum(差分约束系统+Bellman-Ford)
- UVA 11478V Halum 二分答案+差分约束系统
- Uva 11478 Halum(差分约束系统 + 二分)
- windows 环境下Eclipse开发MapReduce环境设置
- Spring Aop详尽教程
- Android之AsyncTask异步任务——防止内存泄露
- Codeforces 629 D Finals in arithmetic(最大上升子序列和,O(nlogn)、线段树/树状数组)
- 在WPF的TreeView中实现右键选定
- UVa 11478 Halum BellmanFord判负权环
- 欢迎使用CSDN-markdown编辑器
- nyoj 1070 诡异的电梯【Ⅰ】 动态规划
- 说起Android的Binder,我们都能说些什么?
- 新空间RecycleView复习
- ViewPager嵌套Fragment实现item实时更新的两种方式
- 字符串反转(reverse函数)
- 给UICollectionView添加表头
- win32-hookdll,隐藏辅助进程