最佳完美匹配性质2 uva11383-点上的性质
2017-08-14 13:45
225 查看
//此题我觉得应该是阔以求row(i)+col(j)的最大值的只不过是在w(i,j)>=row(i)+row(j)的情况下,将边反号就好了,当然也阔以不反号直接求。。上一篇题解写了。 #include<iostream> #include<cstdio> #include<algorithm> using namespace std; int map[600][600]; int visitx[600], visity[600], match[600], valuex[600], valuey[600],slack[600]; int n; bool dfs(int num) { visitx[num] = 1; for (int i = 0; i < n; i++) { if (visity[i])continue; int t = valuex[num] + valuey[i] - map[num][i]; if (t == 0) { visity[i] = 1; if (match[i] == -1 || dfs(match[i])) { match[i] = num; return true; } } else { slack[i] = min(slack[i], t); } } return false; } void km() { for (int i = 0; i < n; i++)match[i] = -1; for (int i = 0; i < n; i++) { for (int k = 0; k < n; k++)slack[k] = 1000000000; while (1) { for (int k = 0; k < n; k++)visitx[k] = 0, visity[k] = 0; if (dfs(i))break; int d = 1000000000; for (int k = 0; k < n; k++) if (!visity[k])d = min(d, slack[k]); for (int k = 0; k < n; k++) { if (visitx[k]) valuex[k] -= d; if (visity[k]) valuey[k] += d; else slack[k] -= d; } } } } int main() { while (scanf("%d", &n) != EOF) { for (int i = 0; i < n; i++) { valuex[i] = -1; valuey[i] = 0; for (int j = 0; j < n; j++) { scanf("%d", &map[i][j]); valuex[i] = max(valuex[i], map[i][j]); } } km(); long long ans = 0; for (int i = 0; i < n; i++) { if (i != n - 1) printf("%d ", valuex[i]); else printf("%d", valuex[i]); ans += valuex[i]; } printf("\n"); for (int i = 0; i < n; i++) { if (i != n - 1) printf("%d ", valuey[i]); else printf("%d", valuey[i]); ans += valuey[i]; } printf("\n"); printf("%d\n", ans); } }
相关文章推荐
- Uva11383 二分图的完美匹配(深入理解KM算法)
- UVALive 4043 Ants(二分图最佳完美匹配、KM)
- UVA 11383 - Golden Tiger Claw(二分图完美匹配扩展)
- UVA 11383 - Golden Tiger Claw(二分图完美匹配扩展)
- 最佳完美匹配性质1poj3565-边上的性质
- UVALive 4043 Ants(二分图最佳完美匹配、KM)
- UVa 1349 Optimal Bus Route Design (最佳完美匹配)
- UVaLive 4043 Ants (最佳完美匹配)
- UVaLive 4043 Ants(二分图最佳完美匹配、KM)
- POJ 2195 Going Home (最佳完美匹配, 最小费用最大流)
- uva 11383(二分图最大权匹配)
- UVALive 11383 - Golden Tiger Claw(最小权匹配)
- hdu-3488-Tour(KM最佳完美匹配)
- HDOJ-1533 二分图最佳完美匹配通俗解释
- uvalive 2966 求一个二分图 所有的完美匹配
- UVA 11383 Golden Tiger Claw(最佳二分图完美匹配)
- uva 1411 Ants (权值和最小的完美匹配---KM算法)
- uva 1411 Ants (权值和最小的完美匹配---KM算法)
- Uva - 11383 - Golden Tiger Claw(二分图最佳完美匹配)
- UVA1349 Optimal Bus Route Design 拆点法+最小费用最佳匹配