标签:
Time Limit: 1000MS | Memory Limit: 65536K | |||
Total Submissions: 4309 | Accepted: 2866 | 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
裸体模板直接过,wa了一次,要裸奔了...
比较有意思的是,复习了tupu_sort的模板,初始阶段计算所有节点的入度,遍历所有节点,入度为0的弹入栈,更新其余节点的入度,重复以上操作
本题是必然存在一个tupu_sort,所以我们每次讲一个入度为0的弹入栈就好了,注意break,这样能保证类似bfs的,高层优先
#include <iostream> #include <cstdio> #include <cstdlib> #include <cstring> #include <cmath> #include <string> #include <stack> #include <queue> #include <algorithm> const int inf = 0x3f3f3f; const int MAXN = 1e2+10; //const int MMAXN = 2e5+10; using namespace std; int n; int G[MAXN][MAXN]; int indegree[MAXN]; int vist[MAXN]; int ways[MAXN]; int main() { int t; while(scanf("%d",&n)!=EOF){ memset(G,0,sizeof(G)); memset(indegree,0,sizeof(indegree)); memset(vist,0,sizeof(vist)); int top=0; for(int i=1;i<=n;i++){ while(scanf("%d",&t),t){ G[i][t] = 1; indegree[t]++; } } for(int i=1;i<=n;i++){ for(int j=1;j<=n;j++){ if(!vist[j]&&indegree[j]==0){ ways[top++] = j; vist[j] = 1; /*for(int k=1;k<=n;k++){ if(G[j][k]==1) indegree[k]--; }*/ break; } } for(int j=1;j<=n;j++){ if(G[ways[top-1]][j]){ indegree[j]--; } } } for(int i=0;i<top-1;i++) cout<<ways[i]<<" "; cout<<ways[top-1]<<endl; } // cout << "Hello world!" << endl; return 0; }
标签:
原文地址:http://www.cnblogs.com/EdsonLin/p/5444897.html