POJ3256 Cow Picnic DFS搜索

来源:互联网 发布:win10 mac地址怎么查 编辑:程序博客网 时间:2024/05/29 18:03

题意:给你N块地,然后给出M头牛,在给出这N块地的相连情况。现在这M头牛要聚会,问可以有多少块

地可以被选作聚会地点

#include <cstdio>#include <cstring>using namespace std;const int MAXN=1005;bool mp[MAXN][MAXN];int mark[MAXN];int unite[MAXN];int k,n,m;int vis[MAXN];void dfs(int u,int s){vis[u]=1;unite[u]+=s;  //如果没有两个奶牛在一个点的情况那就是1了,比如6 6 3,表示第6个草地有两头奶牛for(int i=1;i<=n;i++){if(mp[u][i]&&!vis[i]){dfs(i,s);}}}int main(){while(scanf("%d%d%d",&k,&n,&m)!=EOF){memset(mp,false,sizeof(mp));memset(mark,0,sizeof(mark));memset(unite,0,sizeof(unite));for(int i=0;i<k;i++){int x;scanf("%d",&x);mark[x]++;   //可能有两个奶牛在一起}for(int i=0;i<m;i++){int u,v;scanf("%d%d",&u,&v);mp[u][v]=true;}int res=0;for(int i=1;i<=n;i++){if(mark[i]){memset(vis,0,sizeof(vis));//每次搜索重置visdfs(i,mark[i]);}}for(int i=1;i<=n;i++)if(unite[i]==k)res++;printf("%d\n",res);}return 0;}


0 0
原创粉丝点击