依旧是水题
Problem Description
给定一个有向图,判断该有向图是否存在一个合法的拓扑序列。
Input
输入包含多组,每组格式如下。
第一行包含两个整数n,m,分别代表该有向图的顶点数和边数。(n<=10)
后面m行每行两个整数a b,表示从a到b有一条有向边。
Output
若给定有向图存在合法拓扑序列,则输出YES;否则输出NO。
Example Input
1 0 2 2 1 2 2 1
Example Output
YES NO
Hint
Author
赵利强
#include<stdio.h> #include<string.h> int map[12][12], r[12]; int main() { int n, m; while(~scanf("%d %d", &n, &m)) { int a, b; memset(r, 0, sizeof(r)); memset(map, 0, sizeof(map)); while(m--) { scanf("%d %d", &a, &b); map[a][b] = 1; r[b]++; } int sum = n; while(sum) { int i; for(i = 1; i <= n; i++) { if(r[i] == 0) break; } if(i > n) break; r[i]--; sum--; int k; for(k = 1; k <= n; k++) if(map[i][k]) r[k]--; } if(sum) printf("NO\n"); else printf("YES\n"); } return 0; }