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; }