1 solutions
-
0
C++ :
//AUTHOR::STDAFX //ALGORITHM::Hungary #define MAXN 2010UL #define MAXQ 2000010UL #include <cstdio> #include <cstring> using namespace std; void Work(); inline void Build(int,int); bool dfs(int); struct Edge{ int v,nx; }; Edge edge[MAXQ]; int link[MAXN],headlist[MAXN],gs,node,pt,ans,edge_cs,n; bool used[MAXN]; int main(){ while(~scanf("%d",&n)){ Work(); } return 0; } inline void Build(int u,int v){ edge[++edge_cs].v=v; edge[edge_cs].nx=headlist[u]; headlist[u]=edge_cs; return; } bool dfs(int u){ for(int i=headlist[u];i!=-1;i=edge[i].nx){ if(!used[edge[i].v]){ used[edge[i].v]=1; if(link[edge[i].v]==-1||dfs(link[edge[i].v])){ link[edge[i].v]=u; return true; } } } return false; } void Work(){ memset(link,-1,sizeof(link)); memset(headlist,-1,sizeof(headlist)); ans=0;edge_cs=0; for(int i=0;i<n;i++){ scanf("%d%d",&node,&gs); for(int j=1;j<=gs;j++){ scanf("%d",&pt); Build(node,pt); Build(pt,node); } } for(int i=0;i<n;i++){ memset(used,0,sizeof(used)); if(dfs(i)){ ans++; } } printf("%d\n",ans>>1); return; }
- 1
Information
- ID
- 18449
- Time
- 1000ms
- Memory
- 128MiB
- Difficulty
- (None)
- Tags
- # Submissions
- 0
- Accepted
- 0
- Uploaded By