题目链接:
讲解视频链接:
输入
第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"。
样例输入
22 21 22 13 21 21 3
样例输出
WrongCorrect
1 #include2 #include 3 #include 4 #include 5 using namespace std; 6 #define maxn 500000 7 vector vc[maxn]; 8 int n, m; 9 int dis[maxn];10 bool toupu()11 {12 queue q;13 while (!q.empty()) q.pop();14 for (int i = 1; i <= n; i++) if (!dis[i]) q.push(i);15 int ans = 0;16 while (!q.empty())17 {18 int temp = q.front(); q.pop();19 ans++;20 for (int i = 0; i < vc[temp].size(); i++)21 {22 if (--dis[vc[temp][i] ]== 0) q.push(vc[temp][i]);23 }24 }25 if (ans == n) return true;26 return false;27 }28 int main()29 {30 int t;31 cin >> t;32 while (t--)33 {34 cin >> n >> m;35 for (int i = 0; i < n; i++) vc[i].clear();36 memset(dis, 0, sizeof(dis));37 for (int i = 0; i < m; i++)38 {39 int a, b;40 cin >> a >> b;41 vc[a].push_back(b);42 dis[b]++;43 }44 if (!toupu()) cout << "Wrong" << endl;45 else cout << "Correct" << endl;46 }47 return 0;48 }