#include <cstdio>
#include <cstring>
#include <vector>
#include <queue>
#define MAXN 100000+5
using namespace std;
vector<int> edge[MAXN];
queue<int> q;
int indeg[MAXN];
inline void init()
{
for(int i=0; i<MAXN; ++i) {
edge[i].clear();
}
memset(indeg, 0, sizeof(indeg));
while (!q.empty()) q.pop();
}
int main()
{
int t,n,m,u,v;
scanf("%d",&t);
while(t--)
{
init();
scanf("%d%d",&n,&m);
// printf("flag\n");
for (int i=0; i<m; ++i)
{
scanf("%d%d",&u,&v);
edge[u].push_back(v);
++indeg[v];
}
int cnt = 0;
for(int i=1; i<=m; ++i) {
if(indeg[i] == 0) {
q.push(i);
}
}
while (!q.empty()) {
int cur = q.front();
++cnt;
q.pop();
// for (auto &p : edge[cur]) {
for (int i=0; i<edge[cur].size(); ++i) {
int p = edge[cur][i];
--indeg[p];
if (indeg[p] == 0) {
q.push(p);
}
}
}
if (cnt == n) printf("Correct\n");
else printf("Wrong\n");
}
}
HihoCoder - 1174 拓扑排序·一(拓扑排序裸题)
最新推荐文章于 2022-10-03 21:07:14 发布