现在的位置: 首页 > 综合 > 正文

Legal or Not

2012年12月18日 ⁄ 综合 ⁄ 共 862字 ⁄ 字号 评论关闭
//用邻接矩阵写的,加 stl 栈,自己写栈也好简单的,直接开个数组,一个指针就可以了。。用stl太废时间了。
//有些题目很容易超时
 1 #include <stdio.h>
2 #include <string.h>
3 #include <stdlib.h>
4 #include <stack>
5 using namespace std;
6
7 int N, M, dp[110], visit[510];
8
9 int map[110][110];
10
11 int main( )
12 {
13 int i, j, a, b, t, flag, k ,l;
14 while (scanf("%d%d", &N, &M),N||M) {
15 flag = 0;
16 k = 0;
17 l = 0;
18 stack<int>q;
19 memset(dp, 0, sizeof(dp));
20 memset(visit, 0, sizeof(visit));
21 memset(map, 0, sizeof(map));
22 for (i = 1; i <= M; i++) {
23 scanf("%d%d", &a, &b);
24 if(map[a][b] == 1)
25 continue;
26 dp[b]++;
27 map[a][b] = 1;
28 }
29 for (i = 0; i < N; i++)
30 if(dp[i] == 0) {
31 q.push(i);
32 visit[i] = 1;
33 l++;
34 break;
35 }
36 if (l == 0) {
37 printf("NO\n");
38 continue;
39 }
40
41 while (!q.empty( )) {
42 t = q.top( );
43 q.pop();
44 for (i = 0; i < N; i++)
45 if(map[t][i] == 1)
46 dp[i]--;
47 for (i = 0; i < N; i++)
48 if(dp[i] == 0 && !visit[i]) {
49 q.push(i);
50 visit[i] = 1;
51 l++;
52 break;
53 }
54 }
55 if (l == N )
56 printf("YES\n");
57 else
58 printf("NO\n");
59
60 }
61 return 0;
62 }

  

抱歉!评论已关闭.