1 条题解

  • 0
    @ 2025-8-24 21:42:18

    自动搬运

    查看原文

    来自洛谷,原作者为

    avatar xueyangkai
    None

    搬运于2025-08-24 21:42:18,当前版本为作者最后更新于2016-12-23 19:03:11,作者可能在搬运后再次修改,您可在原文处查看最新版

    自动搬运只会搬运当前题目点赞数最高的题解,您可前往洛谷题解查看更多

    以下是正文


    从k个奶牛分别dfs,用mk[i]表示第i个牧场被遍历过多少次,最后只有mk[i]==k的牧场满足条件。无权的有向图也可以用vector存储。

    #include <queue>
    #include <cstdio>
    #include <iostream>
    using namespace std;
    bool vis[1010];
    int k,n,m,ans;
    int mk[1010],a[1010];
    vector <int> b[1010];
    void dfs(int x)
    {
         vis[x]=1;  mk[x]++;
         for(int i=0;i<b[x].size();i++)
             if(!vis[b[x][i]])
                 dfs(b[x][i]);
    }
    int main()
    {
        int x,y;
        cin>>k>>n>>m;
        for(int i=1;i<=k;i++) cin>>a[i];
        for(int i=1;i<=m;i++) 
        {
            cin>>x>>y;
            b[x].push_back(y);
        }
        for(int i=1;i<=k;i++) { for(int j=1;j<=n;j++) vis[j]=0;  dfs(a[i]);}
        for(int i=1;i<=n;i++) if(mk[i]==k) ans++;
        cout<<ans;
        return 0;
    }
    
    • 1

    信息

    ID
    1918
    时间
    1000ms
    内存
    125MiB
    难度
    3
    标签
    递交数
    0
    已通过
    0
    上传者