拓扑排序-hihocoder1175
Posted wengsy150943
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了拓扑排序-hihocoder1175相关的知识,希望对你有一定的参考价值。
https://hihocoder.com/problemset/problem/1175
主要是要明白拓扑排序的概念,就是找出满足用有向图表示的偏序关系的全序关系,知道这一点之后,直接模拟即可。不断寻找入度为0的点加进来,把相邻的点入度减一。重复到无法添加。
const int MAXN=(int)1e5+5,MOD=142857; vector<int>e[MAXN]; int a[MAXN],head[MAXN],ind[MAXN],vis[MAXN]; void init() memset(ind,0,sizeof(ind)); memset(head,0,sizeof(head)); void solve() init(); int n,m,u,v,k,sum(0); cin>>n>>m>>k; for(int i=1;i<=k;i++) scanf("%d",&u); a[u]++; for(int i=1;i<=m;i++) scanf("%d%d",&u,&v); e[u].push_back(v); ind[v]++; queue<int>que; for(int i=1;i<=n;i++) if(!ind[i]) // ind[i]--; que.push(i); vis[i]=1; while(!que.empty()) int tmp=que.front(); //cout<<tmp<<" "<<a[tmp]<<endl; que.pop(); sum=(sum+a[tmp])%MOD; for(int i=0;i<e[tmp].size();i++) if(!vis[e[tmp][i]]) ind[e[tmp][i]]--; a[e[tmp][i]]+=a[tmp]; a[e[tmp][i]]%=MOD; if(!ind[e[tmp][i]]) vis[e[tmp][i]]=1; que.push(e[tmp][i]); cout<<sum<<endl;
以上是关于拓扑排序-hihocoder1175的主要内容,如果未能解决你的问题,请参考以下文章
hihoCoder1343 : Stable MembersBFS拓扑排序