UVA11478 Halum (差分约束)
来源:互联网 发布:数据中心网络设计方案 编辑:程序博客网 时间:2024/06/06 04:26
讲每个点的所有操作同一起来, 设sum[u]为u节点上d值之和。二分枚举答案x,就得到了 sum(a)-sum(b)+w(a,b)>=x ,即sum[b] - sum[a] <= w[a, b] - x.对于差分约束系统来讲,j - i <= w, 建边i->j,权值为w。
建好图后,题意要求最小边最大且大于0.那么如果最小边为原图最大边+1的时候任不存在负环,那么答案显然是inf了。而如果原图存在权值和<=0的环,那么答案就是no solution了。
而且这个题有点猥琐。。。spfa中,判负环的节点入队限制如果为n的话,用vector的spfa模板是会TLE的,但是改成sqrt(n)后,100+ms无压力。。。
#include<algorithm>#include<iostream>#include<cstring>#include<cstdlib>#include<fstream>#include<sstream>#include<string>#include<vector>#include<bitset>#include<cstdio>#include<queue>#include<stack>#include<cmath>#include<map>#include<set>using namespace std;#define FF(i, a, b) for(int i=a; i<b; i++)#define FD(i, a, b) for(int i=a; i>=b; i--)#define REP(i, n) for(int i=0; i<n; i++)#define CLR(a, b) memset(a, b, sizeof(a))#define debug puts("**debug**")#define LL long long#define PB push_backconst int maxn = 555;const int INF = 100000;int n, m, d[maxn], cnt[maxn], limit;bool inq[maxn];struct Edge{ int from, to, dist;};vector<Edge> edges;vector<int> G[maxn];void add(int a, int b, int c){ edges.PB((Edge){a, b, c}); int nc = edges.size(); G[a].PB(nc-1);}inline void init(){ REP(i, n+1) G[i].clear(); edges.clear(); FF(i, 1, n+1) add(0, i, 0); limit = (int) sqrt (n + 0.0) + 1;}bool negacycle(){ queue<int> q; q.push(0); d[0] = 0; CLR(inq, 0); CLR(cnt, 0); FF(i, 1, n+1) d[i] = INF; while(!q.empty()) { int u = q.front(); q.pop(); inq[u] = false; int nc = G[u].size(); REP(i, nc) { Edge e = edges[G[u][i]]; if(d[e.to] > d[u] + e.dist) { d[e.to] = d[u] + e.dist; if(!inq[e.to]) { q.push(e.to); inq[e.to] = 1; if(++cnt[e.to] > limit) return false; } } } } return true;}bool ok(int x){ int nc = edges.size(); REP(i, nc) edges[i].dist -= x; bool ret = negacycle(); REP(i, nc) edges[i].dist += x; return ret;}int main(){ while(~scanf("%d%d", &n, &m)) { init(); int maxv = -INF, a, b, c; REP(i, m) { scanf("%d%d%d", &a, &b, &c); add(a, b, c); maxv = max(maxv, c); } if(ok(maxv + 1)) puts("Infinite"); else if(!ok(1)) puts("No Solution"); else { int L = 1, R = maxv, ans , M; while(L <= R) { M = (L + R) >> 1; if(ok(M)) ans = M, L = M + 1; else R = M - 1; } printf("%d\n", ans); } } return 0;}
- UVA11478 Halum (差分约束)
- UVa11478 - Halum(差分约束)
- uva11478 - Halum 二分+差分约束
- uva11478 Halum【二分+差分约束】
- UVA11478-Halum(BellmanFord + 差分约束)
- UVA11478 [Halum] 二分答案+SPFA差分约束系统
- uva11478差分约束
- UVA11478 Halum 解题报告【图论】【二分答案】【SPFA】【差分约束系统】
- uva11478(差分约束,spfa求负环)
- UVA 11478 - Halum 差分约束
- 11478 - Halum(差分约束)
- UVA - 11478 Halum(差分约束系统)
- UVA 11478 Halum(差分约束)
- UVA 11478 Halum(差分约束,5级)
- UVA 11478 Halum(二分 + 差分约束)
- uva 11478 Halum(图论-差分约束)
- UVA 11478 - Halum(差分约束+最短路)
- uva 11478 Halum (差分约束+二分+SPFA判负环)
- VB.net学习笔记(十一)我的形态区别:Me,MyClass,MyBase,My
- android-----模拟器加载自己编译的内核(适用于驱动练习)
- timus 1149. Sinus Dances URAL 解题报告
- Struts1 和 Struts2 是否是单例
- 黑马程序员_读写TXT文件
- UVA11478 Halum (差分约束)
- 【deep learning学习笔记】Restricted Boltzmann Machines for Collaborative Filtering
- 跟我一起学Python之三:模块及保存运行
- JDBC连接MySQL数据库及示例
- poj 1159 Palindrome
- Windows操作系统I/O模型—笔记1(select (选择模型))
- Citrix 服务器虚拟化之二十二 桌面虚拟化之Provisioning Services创建标准映像实现无盘部署
- hdu4486 Pen Counts
- ICE通信之IceGrid服务(二)