标签:print dfa inpu ++ ural appear together nothing 拓扑
Time Limit: 1000MS | Memory Limit: 65536K | |||
Total Submissions: 8003 | Accepted: 5184 | Special Judge |
Description
Input
Output
Sample Input
5 0 4 5 1 0 1 0 5 3 0 3 0
Sample Output
2 4 5 3 1
Source
#include<stdio.h> #include<iostream> #include<math.h> #include<string.h> #include<set> #include<map> #include<list> #include<queue> #include<algorithm> using namespace std; typedef long long LL; int mon1[13]= {0,31,28,31,30,31,30,31,31,30,31,30,31}; int mon2[13]= {0,31,29,31,30,31,30,31,31,30,31,30,31}; int dir[4][2]= {{0,1},{0,-1},{1,0},{-1,0}}; int getval() { int ret(0); char c; while((c=getchar())==‘ ‘||c==‘\n‘||c==‘\r‘); ret=c-‘0‘; while((c=getchar())!=‘ ‘&&c!=‘\n‘&&c!=‘\r‘) ret=ret*10+c-‘0‘; return ret; } #define max_v 105 priority_queue<int,vector<int>,greater<int> > q; int indegree[max_v]; int G[max_v][max_v]; int n,m; void inittp() { for(int i=1;i<=n;i++) if(indegree[i]==0) q.push(i);//入度为0的点放入优先队列,优先队列是为了考虑字典序输出 } void tpsort() { int temp; int c=1; while(!q.empty()) { temp=q.top(); q.pop(); if(c!=n) { printf("%d ",temp); c++; }else { printf("%d\n",temp); } for(int i=1;i<=n;i++) { if(G[temp][i])//存在边 { indegree[i]--;//i点入度-- if(indegree[i]==0)//若入度为0则放入队列 q.push(i); } } } } int main() { int x; while(~scanf("%d",&n)) { memset(indegree,0,sizeof(indegree)); memset(G,0,sizeof(G)); for(int i=1;i<=n;i++) { while(1) { scanf("%d",&x); if(x==0) break; if(G[i][x]==0)//防止重边增加入度 { G[i][x]=1; indegree[x]++; } } } inittp(); tpsort(); } return 0; }
POJ 2367 Genealogical tree 拓扑排序入门题
标签:print dfa inpu ++ ural appear together nothing 拓扑
原文地址:https://www.cnblogs.com/yinbiao/p/9830603.html