1.题目介绍
2.考察点,难度
图论题,Vector容器使用方法,拓扑排序,拷贝,散列存储,难度中
3.解题代码
#include <bits/stdc++.h>
using namespace std;
vector<int>graph[1005]; //有向图
int main(){
freopen("D:\\PAT\\Clion\\in.txt","r",stdin);
int N,M,a,b;
scanf("%d%d",&N,&M);
int degree[N+1]={0}; //入度数组
while(M--){
scanf("%d%d",&a,&b);
graph[a].push_back(b);
++degree[b];
}
scanf("%d",&M);
bool space=false; //是否输出空格
for(int k=0;k<M;++k){
int A[N],temp[N+1];
for(int i=0;i<N;++i)
scanf("%d",&A[i]);
copy(degree,degree+N+1,temp); //将degree数组复制到temp数组中
for(int i=0;i<N;++i)
if(temp[A[i]]!=0){ //当前入度不为0,不是拓扑序列
printf("%s%d",space?" ":"",k); //输出
space=true;
break;
}else //入度为0
for(int j:graph[A[i]]) //遍历能到达的结点并将入度减1
--temp[j];
}
return 0;
}
4.原题地址
https://pintia.cn/problem-sets/994805342720868352/problems/994805343043829760