标签:
Description
Input
Output
Sample Input
input | output |
---|---|
7 2 3 0 3 1 0 1 2 4 5 0 3 0 3 0 7 0 6 0 |
4 2 4 5 6 |
类似二分图,但是可以用dfs+染色的方法解决
#include<stdio.h> #include<vector> #include<string.h> #include<iostream> #include<algorithm> using namespace std; const int maxn=200; int color[maxn]; bool vis[maxn]; vector<int>g[maxn]; int ans[maxn]; void dfs(int u){ vis[u]=true; for(int i=0;i<g[u].size();i++){ int v=g[u][i]; if(!vis[v]){ color[v]=3-color[u]; dfs(v); } } } int main(){ int n; while(scanf("%d",&n)!=EOF){ memset(vis,false,sizeof(vis)); memset(color,0,sizeof(color)); memset(ans,0,sizeof(ans)); int x; for(int i=1;i<=n;i++){ g[i].clear(); for(int j=1;;j++){ scanf("%d",&x); if(!x) break; g[i].push_back(x); } } for(int i=1;i<=n;i++){ if(!vis[i]){ color[i]=1; dfs(i); } } int sum=0; int cnt=-1; for(int i=1;i<=n;i++){ if(color[i]==1){ sum++; ans[++cnt]=i; } } printf("%d\n",sum); for(int i=0;i<=cnt;i++){ printf("%d%c",ans[i],i==cnt?‘\n‘:‘ ‘); } } return 0; }
标签:
原文地址:http://www.cnblogs.com/13224ACMer/p/4830476.html