板子题:hihocoder-1174
#include<bits/stdc++.h>
#define ll long long
#define endl '\n'
using namespace std;
const int INF=0x3f3f3f3f;
const int mod=1e9+7;
const int maxn=1e5+10;
ll n,m,num;
ll InDeg[maxn];
vector<ll> vec[maxn];
queue<ll> q;
bool topsort(){
while(!q.empty()) q.pop();//初始化清空队列
num=0;
for(ll i=1;i<=n;i++) if(!InDeg[i]) q.push(i);//遍历寻找入度为0的点加入队列
while(!q.empty()){
ll now=q.front();
q.pop();
num++;//如果该点入度为0,则加入到拓扑序列之中去
for(ll i=0;i<vec[now].size();i++){
if(--InDeg[vec[now][i]]==0) q.push(vec[now][i]);
//先减少该后继点的前驱数量
//如果前驱数量为0,则加入到拓扑序列之中
}
}
if(num==n) return true;
else return false;
}
int main(){
ll T;cin>>T;
while(T--){
cin>>n>>m;
for(ll i=1;i<=n;i++) vec[i].clear(); //后继初始化清空
memset(InDeg,0,sizeof(InDeg));//入度初始化清空
while(m--){
ll u,v;cin>>u>>v;
vec[u].push_back(v);//添加后继
InDeg[v]++;//添加入度
}
if(topsort()) puts("Correct");
else puts("Wrong");
}
}
来源:CSDN
作者:Anonytt_
链接:https://blog.csdn.net/Rainfoo/article/details/104446038