标签:
题意:裸题,看清楚边数不多这个条件就可以了。
/************************************************ Author :DarkTong Created Time :2016/8/1 20:29:16 File Name :Hdu_1845.cpp *************************************************/ //#include <bits/stdc++.h> #include <cstdio> #include <cstring> #include <vector> using namespace std; const int maxn = 5000 + 10; vector<int> w[maxn]; int n, m; int Left[maxn]; bool used[maxn]; bool match(int i) { for(int j=0;j<w[i].size();++j) if(!used[w[i][j]]) { int v = w[i][j]; used[v] = true; if(!Left[v]||match(Left[v])) { Left[v] = i; return true; } } return false; } //返回最大匹配数 int hungary() { int res=0; memset(Left, 0, sizeof(Left)); for(int i=1;i<=n;++i) { memset(used, 0, sizeof(used)); if(match(i)) res++; } return res; } int main() { int T, cas=1; scanf("%d", &T); while(T--) { for(int i=0;i<maxn;++i) w[i].clear(); int k, u, v; scanf("%d", &n); k = 3*n/2; for(int i=1;i<=k;++i) { scanf("%d%d", &u, &v); w[u].push_back(v); w[v].push_back(u); } printf("%d\n", hungary()>>1); } return 0; }
Hdu_1845 Jimmy’s Assignment -最大匹配裸题
标签:
原文地址:http://www.cnblogs.com/DarkTong/p/5727194.html