题目意思:
给你n个学生,编号为0到n-1;给出有浪漫关系的学生编号。求没有浪漫关系的学生数目。。
如:
7 //7个学生 0: (3) 4 5 6//编号为0的学生与4,5,6有浪漫关系。 1: (2) 4 6 2: (0) 3: (0) 4: (2) 0 1 5: (1) 0 6: (2) 0 1 3 0: (2) 1 2 1: (1) 0 2: (1) 0
code:
#include"stdio.h" #include"string.h" #define N 501 int n,m,map[N][N],mark[N],link[N]; int dfs(int t) { int i; for(i=0;i<n;i++) { if(!mark[i]&&map[t][i]) { mark[i]=1; if(link[i]==-1||dfs(link[i])) { link[i]=t; return 1; } } } return 0; } int MaxMatch() { int i,num; num=0; memset(link,-1,sizeof(link)); for(i=0;i<n;i++) { memset(mark,0,sizeof(mark)); if(dfs(i)) num++; } return num; } int main() { int i,j,a,b,c,ans; while(scanf("%d",&n)!=-1) { memset(map,0,sizeof(map)); for(i=0;i<n;i++) { scanf("%d: (%d) ",&a,&b); for(j=0;j<b;j++) { scanf("%d",&c); map[a][c]=1; } } ans=MaxMatch(); printf("%d\n",n-ans/2); } return 0; }