抓住6月的最后一天刷PAT哈哈
代码写得可能有点烂,想拓扑排序想了好久。
#include<stdio.h>
#include<iostream>
#include<algorithm>
#include<vector>
using namespace std;
const int maxn = 1e3+7;
vector<int> arr;
vector<int> outd[maxn];
int ind[maxn],tem[maxn];
bool isTopological(){
int u,v;
for(int i = 0; i<arr.size(); i++){
u = arr[i];
if(ind[u] != 0) return false;
for(int j = 0; j<outd[u].size(); j++){
v = outd[u][j];
ind[v]--;
}
}
return true;
}
int main(){
//freopen("in.txt", "r", stdin);
ios::sync_with_stdio(false);
int n,m,u,v,q,first=1,num;
cin >> n >> m;
for(int i = 0; i<m; i++){
cin >> u >> v;
outd[u].push_back(v);
ind[v]++;
tem[v]++;
}
cin >> q;
for(int i = 0; i<q; i++){
arr.clear();
for(int j = 0; j<n; j++){
cin >> num;
ind[j+1] = tem[j+1];
arr.push_back(num);
}
if(!isTopological()){
if(first){
first = 0;
}
else printf(" ");
printf("%d", i);
}
}
return 0;
}