HDU 3435 KM A new Graph Game
2015-09-05 10:39
344 查看
和HDU 3488一样的,只不过要判断一下是否有解。
代码君
#include <iostream> #include <cstdio> #include <cstring> #include <algorithm> #include <vector> using namespace std; const int maxn = 1000 + 10; const int INF = 0x3f3f3f3f; int n, m; int W[maxn][maxn], lft[maxn]; int slack[maxn]; int Lx[maxn], Ly[maxn]; bool S[maxn], T[maxn]; bool match(int u) { S[u] = true; for(int v = 1; v <= n; v++) if(!T[v]) { int t = Lx[u] + Ly[v] - W[u][v]; if(0 == t) { T[v] = true; if(!lft[v] || match(lft[v])) { lft[v] = u; return true; } } else slack[v] = min(slack[v], t); } return false; } void update() { int a = INF; for(int i = 1; i <= n; i++) if(!T[i]) a = min(a, slack[i]); for(int i = 1; i <= n; i++) { if(S[i]) Lx[i] -= a; if(T[i]) Ly[i] += a; else slack[i] -= a; } } void KM() { memset(Ly, 0, sizeof(Ly)); memset(lft, 0, sizeof(lft)); for(int i = 1; i <= n; i++) Lx[i] = -INF; for(int i = 1; i <= n; i++) for(int j = 1; j <= n; j++) Lx[i] = max(Lx[i], W[i][j]); for(int i = 1; i <= n; i++) { memset(slack, 0x3f, sizeof(slack)); for(;;) { memset(S, false, sizeof(S)); memset(T, false, sizeof(T)); if(match(i)) break; update(); } } } int main() { int T; scanf("%d", &T); for(int kase = 1; kase <= T; kase++) { scanf("%d%d", &n, &m); for(int i = 1; i <= n; i++) for(int j = 1; j <= n; j++) W[i][j] = -INF; for(int i = 0; i < m; i++) { int u, v, d; scanf("%d%d%d", &u, &v, &d); if(W[u][v] < -d) W[u][v] = W[v][u] = -d; } KM(); bool ok = true; int ans = 0; for(int i = 1; i <= n; i++) { if(W[lft[i]][i] == -INF) { ok = false; break; } ans += W[lft[i]][i]; } printf("Case %d: ", kase); if(!ok) puts("NO"); else printf("%d\n", -ans); } return 0; }
代码君
相关文章推荐
- 浏览,确认提交里获取文件名、文件路径、上传图片
- Keep-Alive
- Android应用程序的权限列表
- Linux下编程------文件与IO(三) 文件共享和fcntl函数
- 寻找数组中最大值和最小值
- PHP中读取文件的几个方法
- Hopfield's associative memory network
- Spinner的用法
- 使用接口求图形的周长与面积
- HDU1937 Finding Seats(dp求最小矩形)
- Palindrome - URAL - 1297(求回文串)
- 2015年-年终总结
- swift 代码笔记2
- CURL抓取网页内容并用正则提取。
- 二级c++——基本操作题小结
- 【codeforces 29A】Spit Problem
- 将你的Vim 打造成轻巧强大的IDE
- hdu1500 (排序+单调队列优化 )
- window 给链接加下划线或取消下划线
- Ajax-JS