Light OJ 1111 Best Picnic Ever

来源:互联网 发布:淘宝联盟店铺活动推广 编辑:程序博客网 时间:2024/06/05 08:44

  注意理解题目的意思:是求所有人都能到的点的个数,直接以每个人为起点bfs就行了。

#include<iostream>#include<cstdio>#include<cstring>#include<queue>#include<vector>#define sf scanf#define pf printfusing namespace std;bool vis[1005];int able[1005];int q[1005];vector<int> G[1005];void unit(){    memset(G,0,sizeof(G));    memset(able,0,sizeof(able));    for(int i=1;i<=1000;i++)        G[i].clear();}void bfs(int st){    queue<int> Q;    memset(vis,0,sizeof(vis));    vis[st]=1,able[st]++;    Q.push(st);    while(!Q.empty())    {        int now=Q.front();        Q.pop();        for(int i=0;i<G[now].size();i++)        {            int tmp=G[now][i];            if(!vis[tmp]) able[tmp]++,vis[tmp]=1,Q.push(tmp);        }    }}int main(){    int i,u,v,T,ca=0;    sf("%d",&T);    while(T--)    {        int k,n,m,_max=-1;        sf("%d%d%d",&k,&n,&m);        for(i=1;i<=k;i++)            sf("%d",&q[i]);        unit();        while(m--)        {            sf("%d%d",&u,&v);            G[u].push_back(v);            _max=max(_max,max(u,v));        }        for(i=1;i<=k;i++)            bfs(q[i]);        int ans=0;        for(i=1;i<=_max;i++)            if(able[i]==k) ans++;        pf("Case %d: %d\n",++ca,ans);    }    return 0;}


0 0
原创粉丝点击