标签:
Time Limit: 1000MS | Memory Limit: 10000K | |
Total Submissions: 30110 | Accepted: 10411 |
Description
Input
Output
Sample Input
4 6 A<B A<C B<C C<D B<D A<B 3 2 A<B B<A 26 1 A<Z 0 0
Sample Output
Sorted sequence determined after 4 relations: ABCD. Inconsistency found after 2 relations. Sorted sequence cannot be determined.
题意:这题题意好蛋疼啊!!!一个一个给边,一个一个的判断,先判断是否有环。然后再判断是否确定序列。最后前两者都不满足,则此序列不确定。
收获:1.知道只有有环时才k<n。2.入度为0的点不唯一,则此序列不确定。3.入度很重要。
下面是能AC代码,但是 0 0会有问题,不知道为什么?还请各位指教。
#include <cstdio> #include <iostream> //#include <cstdlib> #include <algorithm> #include <ctime> #include <cmath> #include <string> #include <cstring> #include <stack> #include <queue> #include <list> #include <vector> #include <map> #include <set> using namespace std; const int INF=0x3f3f3f3f; const double eps=1e-10; const double PI=acos(-1.0); const int maxn=5000; struct Edge { int u, v, next; }; Edge edge[maxn]; int head[maxn]; int num, n,m; void init_edge() { num = 0; memset(head, -1, sizeof(head)); } void addedge(int u, int v) { edge[num].u = u; edge[num].v = v; edge[num].next = head[u]; head[u] = num++; } int ans; int topo[maxn]; int in[maxn]; int topsort() { queue<int> q; int indeg[26]; for(int i = 65; i < 65+n; i++) { indeg[i] = in[i]; if(indeg[i] == 0) q.push(i); } int k = 0; int flag=0; while(!q.empty()) { if(q.size()>1) flag = 1; int u = q.front(); q.pop(); topo[k++] = u; for(int i = head[u]; i != -1; i = edge[i].next) { int v = edge[i].v; indeg[v]--; if(indeg[v]==0) q.push(v); } } if(k < n) return 0; if(flag) return -1; else return 1; } char s[5]; int main() { while(~scanf("%d%d", &n, &m)) { if(n==0 && m==0) break; init_edge(); memset(in, 0, sizeof(in)); int flag2 = 0; int flag3 = 0; for(int j = 1; j <= m; j++) { scanf("%s",s); if(!flag2&&!flag3) { in[s[2]]++; addedge(s[0],s[2]); int res = topsort(); if(res == 0) { printf("Inconsistency found after %d relations.\n", j); flag2 = 1; } if(res == 1) { printf("Sorted sequence determined after %d relations: ", j); for(int i=0; i < n; i++) printf("%c", topo[i]); printf(".\n"); flag3 = 1; } } } if(!flag2&&!flag3) puts("Sorted sequence cannot be determined."); //puts("QAQ"); } return 0; }
POJ1094 Sorting It All Out(拓扑排序)
标签:
原文地址:http://www.cnblogs.com/ZP-Better/p/4706138.html