A 1465 士兵
Posted dxy0310
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了A 1465 士兵相关的知识,希望对你有一定的参考价值。
题意:给N个点M条边,判断是否构成有环图,若无,输出字典序最小的拓扑序列
思路:拓扑排序+优先队列
//By DXY 2018.04.26 //按字典序就用优先队列即可 //拓扑排序+优先队列 #include<iostream> #include<cmath> #include<cstdio> #include<cstdlib> #include<cstring> #include<algorithm> #include<queue> #include<stack> #include<map> using namespace std; #define ll long long int n,m,cnt; int d[500000+10],deg[50000+100],head[1000000+10]; struct node { int to,next; }p[1000000+10]; void add(int x,int y) { cnt++; p[cnt].to=y; p[cnt].next=head[x]; head[x]=cnt; } void topsort() { cnt=0; priority_queue< int,vector<int> ,greater<int> > q; for(int i=1;i<=n;i++) if(deg[i]==0) q.push(i); while(q.size()) { int u=q.top(); d[++cnt]=u; q.pop(); for(int i=head[u];i;i=p[i].next) { int v=p[i].to; if(--deg[v]==0) { q.push(v); } } } } int main() { scanf("%d%d",&n,&m); for(int i=1;i<=m;i++) { int a,b; scanf("%d%d",&a,&b); deg[b]++; add(a,b); } topsort(); if(cnt<n) { cout<<"No Answer!"<<endl; return 0; } for(int i=1;i<=n;i++) { cout<<d[i]<<" "; } cout<<endl; return 0; }
以上是关于A 1465 士兵的主要内容,如果未能解决你的问题,请参考以下文章
优化算法精子群优化算法(SSO)含Matlab源码 1465期
优化算法精子群优化算法(SSO)含Matlab源码 1465期
BZOJ-3293&1465&1045分金币&糖果传递×2 中位数 + 乱搞
1465. Maximum Area of a Piece of Cake After Horizontal and Vertical Cuts (M)
leetcode1465. Maximum Area of a Piece of Cake After Horizontal and Vertical Cuts