1 #include<stdio.h>
2 #include<string.h>
3 int number[505],dian1[505],dian2[505],y[505],link[505],hash[505];
4 int f[505][505],g[505][505];
5 int n1,n2;
6 int doit(int k)
7 {
8 int i;
9 for (i=1;i<=number[k];i++)
10 {
11 if (hash[f[k][i]]==hash[k]) return(0);
12 if (hash[f[k][i]]==-1){
13 hash[f[k][i]]=1-hash[k];
14 if (doit(f[k][i])==0) return(0);
15 }
16 }
17 return(1);
18 }
19 int find(int x)
20 {
21 int i;
22 for (i=1;i<=n2;i++)
23 if (g[x][dian2[i]]==1&&y[dian2[i]]==0)
24 {
25 y[dian2[i]]=1;
26 if (link[dian2[i]]==0||find(link[dian2[i]]))
27 {
28 link[dian2[i]]=x;
29 return 1;
30 }
31 }
32 return 0;
33 }
34 int main()
35 {
36 int n,m,a,b,i,j,ans,judge;
37 while (~scanf("%d%d",&n,&m))
38 {
39 memset(g,0,sizeof(g));
40 memset(link,0,sizeof(link));
41 memset(number,0,sizeof(number));
42 memset(f,0,sizeof(f));
43 memset(hash,-1,sizeof(hash));
44 for (i=1;i<=m;i++)
45 {
46 scanf("%d%d",&a,&b);
47 g[a][b]=g[b][a]=1;
48 }
49 for (i=1;i<=n;i++)
50 for (j=1;j<=n;j++)
51 if (g[i][j]==1){
52 number[i]++;
53 f[i][number[i]]=j;
54 }
55 n1=n2=ans=0; judge=1;
56 for (i=1;i<=n;i++)
57 {
58 if (hash[i]==-1)
59 {
60 hash[i]=0;
61 if (doit(i)==0) judge=0;
62 }
63 if (hash[i]==0) {n1++; dian1[n1]=i; }
64 else if (hash[i]==1) {n2++; dian2[n2]=i; }
65 }
66 // for (i=1;i<=n1;i++) printf("%d ",dian1[i]); printf("\n");
67 // for (i=1;i<=n2;i++) printf("%d ",dian2[i]); printf("\n");
68 if (judge)
69 for (i=1;i<=n1;i++)
70 {
71 memset(y,0,sizeof(y));
72 if (find(dian1[i])) ans++;
73 }
74 if (n==1||judge==0) printf("No\n");
75 else printf("%d\n",ans);
76 }
77 }
1 #include<stdio.h>
2 #include<string.h>
3 int y[205],link[205],hash[205];
4 int g[205][205],n;
5 int doit(int k)
6 {
7 int i;
8 for (i=1;i<=n;i++)
9 if (g[i][k]==1)
10 {
11 if (hash[i]==0){
12 hash[i]=-hash[k];
13 if (doit(i)==0) return(0);
14 }else
15 if (hash[k]==hash[i]) return(0);
16 }
17 return(1);
18 }
19 int find(int x)
20 {
21 int i;
22 for (i=1;i<=n;i++)
23 if (g[x][i]==1&&y[i]==0)
24 {
25 y[i]=1;
26 if (link[i]==0||find(link[i]))
27 {
28 link[i]=x;
29 return 1;
30 }
31 }
32 return 0;
33 }
34 int main()
35 {
36 int m,a,b,i,j,ans,judge;
37 while (~scanf("%d%d",&n,&m))
38 {
39 memset(g,0,sizeof(g));
40 memset(link,0,sizeof(link));
41 memset(hash,0,sizeof(hash));
42 for (i=1;i<=m;i++)
43 {
44 scanf("%d%d",&a,&b);
45 g[a][b]=g[b][a]=1;
46 }
47 ans=0;
48 hash[1]=1;
49 judge=doit(1);
50 if (judge==0) { printf("No\n");continue;}
51 for (i=1;i<=n;i++)
52 {
53 memset(y,0,sizeof(y));
54 if (find(i)) ans++;
55 }
56 printf("%d\n",ans/2);
57 }
58 }
http://acm.hdu.edu.cn/showproblem.php?pid=2444