|
发表于 2013-2-2 11:31:55
|
显示全部楼层
- #include <iostream>
- #include <cstring>
- using namespace std;
- int ans,g[200][200],bz[200][200],d[200];
- /* n the number of students
- ** k how many students in a round
- ** s and t the start student
- */
- void dfs(int n,int k,int s,int t)
- {
- if(s == t&& k != 0)
- {
- if(k%2)
- {
- ans++;
- d[t]=1;
- }
- return ;
- }
-
- for(int i=1;i<=n;i++)
- {
- if(g[s][i]==1&&bz[s][i]==0&&d[i]==0)
- {
- bz[s][i]=bz[i][s]=1;
- dfs(n,k+1,i,t);
- bz[s][i]=bz[i][s]=0;
- }
- }
- }
- int main()
- {
- int n,m,a,b;
- while(cin>>n>>m)
- {
- memset(g,0,sizeof(g));
- memset(bz,0,sizeof(bz));
- memset(d,0,sizeof(d));
- for(int i=0;i<m;i++)
- {
- cin>>a>>b;
- g[a][b]=g[b][a]=1;
- }
- ans=0;
- for(int i=1;i<=n;i++)
- {
- dfs(n,0,i,i);
- }
- if( (n-ans)%2 == 1)ans++;
- cout<<ans<<endl;
- }
- return 0;
- }
复制代码 算法:看有多少个人数为奇数的环,有多少个就要减去多少人,最后看剩下的是奇数还是偶数,奇数的话还要再减去一个 |
|