虽然是考拓扑排序。。。但是不需要用什么算法。。。
#include <iostream>
#include <cstdio>
#include <cstring>
#include <vector>
#include <set>
#define MAX 1010
using namespace std;
vector<int> from[MAX];
int N,M,K;
int main()
{
scanf("%d%d",&N,&M);
while(M--)
{
int x,y;
scanf("%d%d",&x,&y);
from[y].push_back(x);
}
int K;
scanf("%d",&K);
vector<int> ans;
for(int ind=0;ind<K;ind++)
{
int ar[MAX];
set<int> s;
bool flag = true;
for(int i=0;i<N;i++)
{
scanf("%d",&ar[i]);
if(!flag)
continue;
s.insert(ar[i]);
for(auto u:from[ar[i]])
{
if(s.find(u)==s.end())
{
flag = false;
break;
}
}
}
if(!flag)
ans.push_back(ind);
}
for(int i=0;i<ans.size();i++)
{
if(i!=0)
printf(" ");
printf("%d",ans[i]);
}
return 0;
}