首页 > 代码库 > 【HDOJ】5154 Harry and Magical Computer

【HDOJ】5154 Harry and Magical Computer

拓扑排序。

 1 /* 5154 */ 2 #include <iostream> 3 #include <cstdio> 4 #include <cstring> 5 #include <cstdlib> 6 #include <queue> 7 #include <vector> 8 using namespace std; 9 10 #define MAXN 10511 12 vector<int> vec[MAXN];13 vector<int>::iterator iter;14 int cnt[MAXN];15 int n, m;16 17 void init() {18     int i;19     20     memset(cnt, 0, sizeof(cnt));21     for (i=1; i<=n; ++i)22         vec[i].clear();23 }24 25 bool topSort() {26     int i, j, k, tmp;27     int c = 0;28     queue<int> Q;29     30     for (i=1; i<=n; ++i) {31         if (cnt[i] == 0) {32             Q.push(i);33         }34     }35     36     while (!Q.empty()) {37         ++c;38         i = Q.front();39         Q.pop();40         for (iter=vec[i].begin(); iter!=vec[i].end(); ++iter) {41             if (--cnt[*iter] == 0) {42                 Q.push(*iter);43             }44         }45     }46     47     if (c < n)48         return false;49     else50         return true;51 }52 53 int main() {54     int i, j, k;55     bool flag;56     57     #ifndef ONLINE_JUDGE58         freopen("data.in", "r", stdin);59     #endif60     61     while (scanf("%d %d", &n, &m) != EOF) {62         init();63         for (i=0; i<m; ++i) {64             scanf("%d %d", &j, &k);65             vec[j].push_back(k);66             ++cnt[k];67         }68         flag = topSort();69         if (flag)70             printf("YES\n");71         else72             printf("NO\n");73     }74     75     return 0;76 }

 

【HDOJ】5154 Harry and Magical Computer