HihoCoder - 1174 拓扑排序·一
由于今天上課的老師講的特別無聊,小Hi和小Ho偷偷地聊了起來。
小Ho:小Hi,你這學期有選什么課么?
小Hi:挺多的,比如XXX1,XXX2還有XXX3。本來想選YYY2的,但是好像沒有先選過YYY1,不能選YYY2。
小Ho:先修課程真是個麻煩的東西呢。
小Hi:沒錯呢。好多課程都有先修課程,每次選課之前都得先查查有沒有先修。教務公布的先修課程記錄都是好多年前的,不但有重復的信息,好像很多都不正確了。
小Ho:課程太多了,教務也沒法整理吧。他們也沒法一個一個確認有沒有寫錯。
小Hi:這不正是輪到小Ho你出馬的時候了么!
小Ho:哎??
我們都知道大學的課程是可以自己選擇的,每一個學期可以自由選擇打算學習的課程。唯一限制我們選課是一些課程之間的順序關系:有的難度很大的課程可能會有一些前置課程的要求。比如課程A是課程B的前置課程,則要求先學習完A課程,才可以選擇B課程。大學的教務收集了所有課程的順序關系,但由于系統故障,可能有一些信息出現了錯誤?,F在小Ho把信息都告訴你,請你幫小Ho判斷一下這些信息是否有誤。錯誤的信息主要是指出現了"課程A是課程B的前置課程,同時課程B也是課程A的前置課程"這樣的情況。當然"課程A是課程B的前置課程,課程B是課程C的前置課程,課程C是課程A的前置課程"這類也是錯誤的。
提示:拓撲排序
輸入
第1行:1個整數T,表示數據的組數T(1 <= T <= 5)
接下來T組數據按照以下格式:
第1行:2個整數,N,M。N表示課程總數量,課程編號為1..N。M表示順序關系的數量。1 <= N <= 100,000. 1 <= M <= 500,000
第2..M+1行:每行2個整數,A,B。表示課程A是課程B的前置課程。
輸出
第1..T行:每行1個字符串,若該組信息無誤,輸出"Correct",若該組信息有誤,輸出"Wrong"。
樣例輸入
2 2 2 1 2 2 1 3 2 1 2 1 3樣例輸出
Wrong Correct #include <cstdio> #include <iostream> #include <string> #include <cstring> #include <cmath> #include <algorithm> #include <queue> #include <map> #include <vector> using namespace std; #define ll long longvector<int>to[100000+8]; queue<int>q; priority_queue<int, vector<int>, greater<int> >you;int n, m, t, in[1000000+8], sign[1000000+8], du[1000000+8], si[1000000+8];int get(int miao) {for(int i = 0; i <= miao; i++){du[i] = in[i];si[i] = sign[i];}int num = miao;while(!q.empty()){int t = q.front();num--;q.pop();for(int i = 0; i<to[t].size(); i++){du[to[t][i]]--;if(!du[to[t][i]] && !si[to[t][i]]){q.push(to[t][i]);si[to[t][i]] = 1;}}}return num; }int main() {int a, b;for(scanf("%d", &t);t--;){memset(in, 0, sizeof(in));memset(sign, 0, sizeof(sign));for(int i = 0; i <= n; i++)to[i].clear();scanf("%d%d", &n, &m);for(int i = 0; i<m; i++){scanf("%d%d", &a, &b);to[a].push_back(b);in[b]++;}for(int i = 1; i <= n; i++){if(!in[i] && !sign[i]){q.push(i);you.push(i);sign[i] = 1;}}if(get(n) == 0)printf("Correct\n");else printf("Wrong\n");}return 0; }?
轉載于:https://www.cnblogs.com/RootVount/p/11201113.html
總結
以上是生活随笔為你收集整理的HihoCoder - 1174 拓扑排序·一的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Python定义点击右上角关闭按钮事件
- 下一篇: [Vuex系列] - Module的用法