首页 > 其他 > 详细

POJ 3256 Cow Picnic

时间:2014-02-02 16:05:27      阅读:360      评论:0      收藏:0      [点我收藏+]

题目链接:http://poj.org/problem?id=3256

bubuko.com,布布扣
/*
对每个有牛的草地,都进行dfs,沿着所有的有向边,标记所有经过的草地,经过草地时,草地i的属性visited[i]++,
若存在草地的visited[i]==K,则说明所有的K只牛都能到达此地

cow[i]指的是第i只牛所在的草地

存储路径可以使用邻接表

*/
#include<iostream>
#include<queue>
using namespace std;


int k,n,m;
int head[1001];
int x,y;
int cow[101];
int result;
int visit[1001];
int mark[1001];

//邻接表
struct node{
    int u,v;
    int next;
}edge[10001];

void dfs(int x){       //对第i个草地进行dfs

    visit[x]++;
    mark[x]=1;
    int cur=head[x];
    while(cur!=-1)
    {
        if(mark[edge[cur].v]==0)
            dfs(edge[cur].v);
        cur=edge[cur].next;
    }
}

int main (){

    while(cin>>k>>n>>m){

        memset(visit,0,sizeof(visit));
        for(int i=0;i<k;i++)
            cin>>cow[i];

        memset(head,-1,sizeof(head));
        for(int i=0;i<m;i++)
        {
            cin>>x>>y;
            edge[i].u=x;
            edge[i].v=y;
            edge[i].next=head[x];
            head[x]=i;
        }

        for(int i=0;i<k;i++)
        {
            memset(mark,0,sizeof(mark));
            dfs(cow[i]);
        }

        result=0;

        for(int i=1;i<=n;i++)
        {
            if(visit[i]==k)
                result++;
            //cout<<visit[i];
        }
        cout<<result<<endl;
    }
    return 0;
}
bubuko.com,布布扣

POJ 3256 Cow Picnic

原文:http://www.cnblogs.com/neverchanje/p/3536990.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!