POJ 3687 Labeling Balls
2011-02-14 22:20
281 查看
详细的报告见http://imlazy.ycool.com/post.2144071.html
关键的地方就是要让标号小的尽量往前放,对于平行路径,小的头部不一定排在前面,但大的尾部一定排在后面!
代码:
关键的地方就是要让标号小的尽量往前放,对于平行路径,小的头部不一定排在前面,但大的尾部一定排在后面!
代码:
#include<iostream> #include<queue> #include<cstdio> #include<memory.h> using namespace std; const int MAX=205; struct node { int v,next; }g[MAX*MAX]; int adj[MAX],out[MAX],res[MAX],wei[MAX]; int e,n,m; int topsort() { priority_queue<int>que; int i,u,v,cnt=n; for(i=1;i<=n;i++) if(out[i]==0) que.push(i); while(!que.empty()) { u=que.top(); que.pop(); res[u]=cnt--; for(i=adj[u];i!=-1;i=g[i].next) { v=g[i].v; if(--out[v]==0) que.push(v); } } return cnt==0; } int main() { int i,j,T; scanf("%d",&T); while(T--) { e=0; memset(adj,-1,sizeof(adj)); memset(out,0,sizeof(out)); scanf("%d%d",&n,&m); while(m--) { scanf("%d%d",&i,&j); out[i]++; g[e].v=i; g[e].next=adj[j]; adj[j]=e++; } //cout<<"yes"<<endl; if(topsort()) { for(i=1;i<=n;i++) { printf("%d ",res[i]); } printf("/n"); } else printf("-1/n"); } return 0; }
相关文章推荐
- POJ 3687 Labeling Balls (逆向拓扑排序)
- poj_3687 Labeling Balls
- POJ - 3687 Labeling Balls (拓扑排序)
- poj 3687 Labeling Balls
- poj 3687 Labeling Balls 初级 图 拓扑排序
- poj 3687 Labeling Balls
- POJ 3687--Labeling Balls【拓扑排序 && 逆序拓扑 && 输出在拓扑排序中的位置】
- POJ 3687 Labeling Balls (逆向建边)
- poj 3687 Labeling Balls
- POJ 3687 Labeling Balls (反向拓扑排序)
- poj 3687 Labeling Balls(拓扑排序)
- POJ-3687-Labeling Balls-(求最小字典序拓扑序列)逆向建图-拓扑排序
- POJ 3687 Labeling Balls-拓扑排序
- poj 3687 Labeling Balls - 贪心 - 拓扑排序
- 【poj】3687 Labeling Balls【拓扑排序】
- poj 3687 Labeling Balls【反向拓扑】
- Poj 3687 -- Labeling Balls
- POJ-3687 Labeling Balls
- POJ-3687-Labeling Balls
- poj 3687 Labeling Balls