ural 1106. Two Teams

给你朋友关系,要求分成两个队,使得任意一个人在一个队,他在另一个队都有朋友。

 

直接DFS,不过这么DFS有点莫名其妙哈。。。

 

#include <queue> #include <stack> #include <math.h> #include <stdio.h> #include <stdlib.h> #include <iostream> #include <limits.h> #include <string.h> #include <algorithm> using namespace std; const int MAX = 110; bool map[MAX][MAX]; bool used[MAX]; bool team[MAX]; int n; void DFS(int x) { used[x] = 1; for(int i=1; i<=n; i++) if( map[x][i] && !used[i] ) { if( !team[x] ) team[i] = true; DFS(i); } } int main() { int t; scanf("%d",&n); for(int i=1; i<=n; i++) while( scanf("%d",&t) && t ) map[i][t] = 1; memset(used,0,sizeof(used)); memset(team,false,sizeof(team)); for(int i=1; i<=n; i++) if( !used[i] ) DFS(i); int ans = 0; for(int i=1; i<=n; i++) if( team[i] ) ans++; printf("%d/n",ans); for(int i=1; i<=n; i++) if( team[i] ) { printf("%d",i); ans--; printf("%c",ans == 0 ? '/n' : ' ' ); } return 0; }  

 

你可能感兴趣的:(c)