匈牙利算法 最大二分图匹配
2017-08-22 08:21
330 查看
#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; }
相关文章推荐
- Matrix Gym - 100741F 匈牙利算法(最大二分图匹配)
- 【二分图匹配入门专题1】F - COURSES poj1469【最大匹配--匈牙利算法模板题】
- nyoj 239 月老的难题 (最大二分图匹配匈牙利算法)
- UVA 12168 Cat vs. Dog(二分图匹配+匈牙利算法+最大独立集+数据转化)
- 二分图匹配之最大匹配——匈牙利算法
- Poj1325 Machine Schedule 最大二分图匹配 匈牙利算法
- HDU 1068 Girls and Boys(二分图匹配+最大独立集+匈牙利算法)
- NYOJ 月老的难题 (最大二分图匹配,匈牙利算法)
- 【二分图匹配】最大匹配-匈牙利算法BFS && DFS写法
- NYOJ 月老的难题 (最大二分图匹配,匈牙利算法)
- 【二分图匹配】最大二分匹配——匈牙利算法
- codevs 1922 骑士共存问题||二分图||最大独立集||二分图匹配||Dinic与匈牙利算法的讨论||网络流
- 最大二分图匹配(匈牙利算法)
- hdu 1068 zoj 1137 poj 1466 Girls and Boys(二分图匹配 匈牙利算法 最大独立集)
- HDU 2063 最大二分图匹配 匈牙利算法
- POJ1274 匈牙利算法 最大二分图匹配入门模板
- 最大二分图匹配(匈牙利算法)
- HDU - 1150 Machine Schedule 最小点覆盖(最大二分图匹配-匈牙利算法)邻接表写法
- poj2239 Selecting Courses(最大二分图匹配 (匈牙利算法) 实现 )
- 过山车(匈牙利算法,最大二分图匹配)