Loading

ICPC Latin American Regional Contests 2019 I. Improve SPAM (拓扑排序,两点间路径数)

题目链接:

https://nanti.jisuanke.com/t/44460

有向无环图,求点1到位置大于L的点的路径数

#include<bits/stdc++.h>

using namespace std;

vector<int>mp[2005];
queue<int>q;
int anss1,anss2,sum[2005];
int vis[2005],n,l,i,k,x,into[2005];

int main()
{
    cin>>n>>l;
    for(i=1;i<=l;i++)
    {
        cin>>k;
        while(k--)
        {
            cin>>x;
            mp[i].push_back(x);
            into[x]++;
        }
    }
    for(i=1;i<=l;i++)
    {
        if(into[i]==0)
        q.push(i);
    }
    sum[1]=1;
    vis[1]=1;
    while(!q.empty())
    {
        int now=q.front();
        q.pop();
        //cout<<now<<endl;
        if(now>l)
        {
            anss1+=sum[now];
            anss1%=1000000007;
            if(vis[now]==1)
            {
                anss2++;
            }
        }
        for(i=0;i<mp[now].size();i++)
        {
            into[mp[now][i]]--;
            vis[mp[now][i]]|=vis[now];
            sum[mp[now][i]]+=sum[now];
            sum[mp[now][i]]%=1000000007;
            if(into[mp[now][i]]==0)
            {
                q.push(mp[now][i]);
            }
        }
    }
    cout<<anss1<<' '<<anss2<<endl;
}

 

posted @ 2020-04-09 08:55  WinterFa1L  阅读(258)  评论(0编辑  收藏  举报