P4017 最大食物链计数

题目链接
注意最后统计要包含所有出度为0的点上的食物链个数

const int N=5010;
vector<int> g[N];
int din[N],dout[N];
int f[N];
int n,m;

int topo()
{
    queue<int> q;
    for(int i=1;i<=n;i++)
        if(!din[i])
        {
            q.push(i);
            f[i]=1;
        }

    while(q.size())
    {
        int t=q.front();
        q.pop();

        for(int i=0;i<g[t].size();i++)
        {
            int j=g[t][i];
            f[j]=(f[j]+f[t])%mod;

            if(--din[j] == 0) q.push(j);
        }
    }
}

int main()
{
    cin>>n>>m;

    while(m--)
    {
        int a,b;
        cin>>b>>a;
        g[a].push_back(b);
        din[b]++;
        dout[a]++;
    }

    topo();

    int res=0;
    for(int i=1;i<=n;i++)
        if(!dout[i])
            res=(res+f[i])%mod;

    cout<<res<<endl;
    //system("pause");
}
posted @ 2020-09-01 17:08  Dazzling!  阅读(200)  评论(0编辑  收藏  举报