P4017 最大食物链计数
题目链接 https://www.luogu.com.cn/problem/P4017
求有向无环图(DAG)有多少条链
dalao的讲解,非常nice!https://www.cnblogs.com/CJYBlog/p/12198894.html
想了段儿时间不知道该怎么计数,看完详解之后非常简单了!
放AC代码
1 #include<bits/stdc++.h> 2 using namespace std; 3 const int N=5e3+5; 4 const int mod=80112002; 5 int n,m,ans; 6 int in[N],out[N],num[N]; 7 vector<int>nei[N]; 8 queue<int>q; 9 10 int main() 11 { 12 cin>>n>>m; 13 for(register int i=1; i<=m; i++) 14 { 15 int u,v; 16 cin>>u>>v; 17 in[v]++; 18 out[u]++; 19 nei[u].push_back(v); 20 } 21 for(register int i=1; i<=n; i++) 22 { 23 if(in[i]==0) 24 { 25 q.push(i); 26 num[i]=1; 27 } 28 } 29 while(!q.empty()) 30 { 31 int now=q.front(); 32 q.pop(); 33 for(register unsigned int i=0; i<nei[now].size(); i++) 34 { 35 int next=nei[now][i]; 36 num[next]=(num[now]+num[next])%mod; 37 in[next]--; 38 if(in[next]==0) q.push(nei[now][i]); 39 } 40 } 41 for(register int i=1; i<=n; i++) 42 if(!out[i]) 43 ans=(ans+num[i])%mod; 44 cout<<ans; 45 return 0; 46 }