题目描述
分析:拓扑排序,判断给出的序列是否是拓扑排序序列,只需要判断当前结点的度是否为0即可
#include<cstdio>
#include<vector>
using namespace std;
const int MAXV=1005;
vector<int> G[MAXV];
int degree[MAXV];
int temp[MAXV];
int a[MAXV];
int main(){
int n,m;
int u,v;
scanf("%d%d",&n,&m);
while(m--)
{
scanf("%d%d",&u,&v);
G[u].push_back(v);
degree[v]++;
}
scanf("%d",&m);
int num=0;
bool flag=false;
for(int k=0;k<m;k++){
copy(degree,degree+n+1,temp);
for(int i=0;i<n;i++){
scanf("%d",&a[i]);
}
for(int i=0;i<n;i++){
if(temp[a[i]]!=0){
if(flag){
printf(" %d",k);
}
else{
printf("%d",k);
}
flag=true;
break;
}
else{
for(int j:G[a[i]]){
temp[j]--;
}
}
}
}
}