HDU 1054 Strategic Game
匈牙利算法模板题
#include <bits/stdc++.h> #include<vector> using namespace std; const int N=1600; int v[N],used[N]; vector<int>q[N]; bool dfs(int u) { int i,j; for(i=0; i<q[u].size(); i++) { int t=q[u][i]; if(!v[t]) { v[t]=1; if(used[t]==-1||dfs(used[t])) { used[t]=u; return true; } } } return false; } int main() { int n,i,j,k,a,b; while(~scanf("%d",&n)) { for(i=0; i<=n; i++) q[i].clear(); int sum=0; for(i=0; i<n; i++) { scanf("%d:(%d)",&a,&k); while(k--) { scanf("%d",&b); q[a].push_back(b); q[b].push_back(a); } } memset(v,0,sizeof(v)); memset(used,-1,sizeof(used)); for(i=0; i<n; i++) { memset(v,0,sizeof(v)); if(dfs(i)) sum++; } printf("%d ",sum/2); } }