#include<iostream>
#include<cstdio>
#include<list>
#include<algorithm>
#include<cstring>
#include<string>
#include<queue>
#include<stack>
#include<map>
#include<vector>
#include<cmath>
#include<memory.h>
#include<set>
#define ll long long
#define LL __int64
#define eps 1e-8
const ll INF=9999999999999;
using namespace std;
#define M 400000100
#define inf 0xfffffff
vector<int>G[1512];
bool vis[1512];
int marry[1512];
void clear()
{
memset(vis,false,sizeof(vis));
memset(marry,-1,sizeof(marry));
for(int i=0;i<1512;i++)
G[i].clear();
}
int dfs(int x)
{
for(int i=0;i<G[x].size();i++)
{
int v=G[x][i];
if(!vis[v])
{
vis[v]=true;
if(marry[v]==-1 || dfs(marry[v]))
{
marry[v]=x;
return 1;
}
}
}
return 0;
}
int main(void)
{
int n;
while(scanf("%d",&n)==1)
{
clear();
int number,num,u;
for(int i=0;i<n;i++)
{
scanf("%d:(%d)",&number,&num);
for(int j=0;j<num;j++)
{
scanf("%d",&u);
G[number].push_back(u);
G[u].push_back(number);
}
}
int ans=0;
for(int i=0;i<n;i++)
{
memset(vis,false,sizeof(vis));
if(dfs(i))
ans++;
}
printf("%d\n",ans/2);
}
}
HDU1054 Strategic Game 二分匹配
最新推荐文章于 2016-07-08 16:04:40 发布