题意:给一张图,给出一些遍历顺序,输出其中不满足拓扑排序的index。
题解:一道拓扑排序的简单题,关键抓住出度与入度,当前点可以加入结果的条件是入度为0,跑一边图,判断点的入度是否为0,不为0则非法。
注意点:基础25分题,注意细节即可。
code in view
// topological order
#include<bits/stdc++.h>
using namespace std;
const int maxn=1e3+10;
int n,m;
int in[maxn],out[maxn],ink[maxn],outk[maxn];
int a[maxn];
vector<int> g[maxn];
int main(){
cin>>n>>m;
for(int i=1;i<=m;i++){
int u,v;
cin>>u>>v;
g[u].push_back(v);
out[u]++;
in[v]++;
}
int k;
cin>>k;
int t=k;
vector<int> res;
while(k--){
bool flag=false;
for(int i=1;i<=n;i++){
cin>>a[i];
ink[i]=in[i];
outk[i]=out[i];
}
for(int i=1;i<=n;i++){
if(ink[a[i]]==0){
for(int j=0;j<g[a[i]].size();j++){
outk[a[i]]--;
ink[g[a[i]][j]]--;
}
}else{
flag=true;
break;
}
}
if(flag) res.push_back(t-k-1);
}
for(int i=0;i<res.size();i++)
printf("%d%c",res[i],i==res.size()-1?'\n':' ');
return 0;
}