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 }

 

posted @ 2022-05-16 21:30  爱吃虾滑  阅读(27)  评论(0)    收藏  举报