匈牙利算法 最大二分图匹配
来源:互联网 发布:淘宝橱窗位怎么设置 编辑:程序博客网 时间:2024/05/14 12:03
#include <iostream>#include <cstdio>#include <cstdlib>#include <cstring>#include <cmath>#include <set>#include <stack>#include <queue>#include <ctype.h>#include <vector>#include <algorithm>#include <time.h>// cout << " === " << endl;using namespace std;typedef long long ll;const int maxn = 500 + 7, INF = 0x3f3f3f3f, mod = 1e9+7;int T, n;int f[maxn][maxn], vis[maxn], ff[maxn];struct node { int h; char x; string m; string s;}r[maxn];bool is_ok(node a, node b) { if(abs(a.h - b.h) > 40) return true; if(a.x == b.x) return true; if(a.m != b.m) return true; if(a.s == b.s) return true; return false;}void init() { memset(f, -1, sizeof f); scanf("%d", &n); for(int i = 1; i <= n; ++i) { scanf("%d %c", &r[i].h, &r[i].x); cin >> r[i].m >> r[i].s; } for(int i = 1; i <= n; ++i) { for(int j = i+1; j <= n; ++j) { if(is_ok(r[i], r[j])) f[i][j] = f[j][i] = 1; else f[i][j] = f[j][i] = 0; } }}bool sol(int id) { for(int i = 1; i <= n; ++i) { if(f[id][i] == 0 && vis[i] == 0) { vis[i] = 1; if(ff[i] == 0 || sol(ff[i])) { ff[i] = id; return true; } } } return false;}void solve() { memset(ff, 0, sizeof ff); int cnt = 0; for(int i = 1; i <= n; ++i) { memset(vis, 0, sizeof vis); if(sol(i)) cnt++; } cout << n-(cnt/2) << endl;}int main() { scanf("%d", &T); while(T--) { init(); solve(); } return 0;}
阅读全文
1 0
- 二分图最大匹配算法-匈牙利算法
- 二分图最大匹配(匈牙利算法)
- 最大二分图匹配(匈牙利算法)
- 最大二分图匹配(匈牙利算法)
- 二分图最大匹配之匈牙利算法
- 二分图最大匹配(匈牙利算法)
- 二分图最大匹配问题匈牙利算法
- 二分图最大匹配问题匈牙利算法
- 匈牙利算法 (二分图的最大匹配)
- 二分图最大匹配 - 匈牙利算法
- 二分图最大匹配(匈牙利算法)
- 二分图最大匹配—匈牙利算法
- 匈牙利算法(二分图最大匹配)
- 二分图最大匹配--匈牙利算法
- 二分图最大匹配的匈牙利算法
- 二分图基数最大匹配 匈牙利算法
- 二分图最大匹配--匈牙利算法
- 二分图最大匹配(匈牙利算法)
- C++ OCCI -1073741701 (0xc000007b)应用程序无法打开的一种解决方法
- 【jsoup】从元素抽取属性,文本和HTML
- 学习java第10天
- APP产品的生命历程与”死亡陷阱”
- matplotlib与pyecharts:pie饼图
- 匈牙利算法 最大二分图匹配
- 快递100
- activeMQ消息阻塞 丢失 假死--架构
- HDU 613 Kolakoski
- 传统目标跟踪方法简介
- HDU4417 Super Mario【树状数组】
- ActiveMQ持久化消息的三种方式
- HDU4122 Alice's mooncake shop【单调队列】
- 用JS获取地址栏参数的方法