要找没关系的人是多少,首先要找到有关系的,所以先进行一次匹配,是相互认识的总人数,在除2就是认识的人一半的人数,再和不认识的加在一起,即相互不认识的最大值
#include<stdio.h>
#include<string.h>
#include<iostream>
using namespace std;
int e[1000][1000];
char ss[2000][2000];
int book[1000];
int f[1000];
int n;
int cont;
int dfs(int x)
{
for(int i=0;i<n;i++)
{
if(e[x][i]&&!book[i])
{
book[i]=1;
if(f[i]==-1||dfs(f[i]))
{
f[i]=x;
return 1;
}
}
}
return 0;
}
int main()
{
while(~scanf("%d",&n))
{
memset(e,0,sizeof(e));
for(int i=0;i<n;i++)
{
int x;
int y;
char ss,ss1,ss2;
scanf("%d",&x);
scanf("%c ",&ss);
scanf(" %c",&ss1);
int m;
scanf("%d",&m);//printf("ok");
scanf(" %c",&ss2);
for(int j=0;j<m;j++)
{
scanf("%d",&y);
e[x][y]=1;
}
}
memset(f,-1,sizeof(f));
int ans=0;
for(int i=0;i<n;i++)
{
memset(book,0,sizeof(book));
if(dfs(i))ans++;
}
printf("%d\n",n-ans/2);
}
}