hdu 2647 拓扑排序
来源:互联网 发布:10.11.4制作mac安装u盘 编辑:程序博客网 时间:2024/06/11 19:40
题意:有n个人m种关系 每种关系是x>y
然后判断有无解 最小解是多少。
最简单的拓扑排序了
建图然后跑完拓扑 最后判断是否是DAG就可以
#include<iostream>#include<cstdio>#include<queue>using namespace std;#define maxn 11111int in[maxn];struct edge{ int u,v,next;}e[maxn*10];int head[maxn],cnt,ans[maxn];void init(){ memset(in,0,sizeof in); memset(head,-1,sizeof head); memset(ans,0,sizeof ans); cnt=0;}void add(int u,int v){ e[cnt].u=u;e[cnt].v=v; e[cnt].next=head[u]; head[u]=cnt;cnt++;}int main(){ int n,m,x,y; while(~scanf("%d%d",&n,&m)){ init(); for(int i=0;i<m;++i){ scanf("%d%d",&x,&y); add(y,x); in[x]++; } int all=0; priority_queue<int>q; for(int i=1;i<=n;++i){ if(in[i]==0){q.push(i);all++;} } while(!q.empty()){ int cur=q.top();q.pop(); for(int i=head[cur];i!=-1;i=e[i].next){ int v=e[i].v; in[v]--;ans[v]=max(ans[cur]+1,ans[v]); if(in[v]==0){q.push(v);all++;} } } if(all<n){ printf("-1\n"); } else{ int x=0; for(int i=1;i<=n;++i){ x+=ans[i]; } printf("%d\n",x+n*888); } } return 0;}
0 0
- HDU-2647拓扑排序
- hdu 2647 拓扑排序
- hdu 2647 拓扑排序
- 拓扑排序 HDU 2647
- hdu 2647 拓扑排序
- hdu 2647 拓扑排序
- hdu 2647(拓扑排序)
- hdu 2647 拓扑排序
- hdu 2647拓扑排序
- hdu 2647 拓扑排序
- 拓扑排序 hdu 2647
- hdu 2647 Reward 拓扑排序
- hdu 2647 Reward 拓扑排序
- hdu 2647 Reward 拓扑排序
- hdu 2647 bfs+拓扑排序
- hdu 2647 Reward 拓扑排序
- hdu 2647拓扑排序 容器
- hdu 2647(拓扑排序)
- c语言思想11
- hdu2011 多项式求和
- sscanf的强大功能
- Dom编程
- 虚拟机设置固定上网地址
- hdu 2647 拓扑排序
- c语言思想12
- Xampp linux,Xampp mac,Xampp mysql,Xampp中文版,Xampp 64位
- 在fvcom_source里 make 出现的问题
- lv655液晶电视东芝
- iOS开发系列之三 - UITextField 用法小结
- Undefined symbols for architecture i386
- 四种强制类型转换的总结(const_cast、static_cast、dynamic_cast、reinterpreter_cast)
- [Python]核心编程之多线程编程