#include<iostream>
#include<vector>
using namespace std;
int n,m;
//入度表
int indegree[1009]={0};
vector<int> v[1009];
int main()
{ int ksge=0;
scanf("%d %d",&n,&m);
//从一开始少输入一组数据 (注意)
for(int i=0;i<m;i++)
{ int q,end;
scanf("%d %d",&q,&end);
v[q].push_back(end);
indegree[end]++;
}
int tempk;
scanf("%d",&tempk);
//题干要求从0开始,没认真读题故意那个啥(注意)
for(int i=0;i<tempk;i++)
{ //每次先拷贝一个入度表 要拷贝前n+1个元素第一个没用
vector<int> tin(indegree,indegree+n+1);
int judge=1;
for(int j=1;j<=n;j++)
{ int tempa;
scanf("%d",&tempa);
//找的是入度不等于0的(注意)
if(tin[tempa]!=0)
{ //judge 只先做个记录在外面实现本次输出 ,把判断放出来(注意)
judge=0;}
for(auto it:v[tempa]) tin[it]--;
}
if(judge==0) {
printf("%s%d",ksge==0?"":" ",i);
//就算找出来因为采用的是输入一行,验证一行所以不能break否则会输入错误 ,此处(注意)
ksge=1;
}
}
return 0;
}
总结:
1.题干说的是从0开始,没认真读题,结点是从一开始(注意)
2、边输入,边处理,如果在过程中已经知道结果,但仍需要输入完成,此时将结果要做的事情移至for循环外 执行,否则会有变化完不成
3.//就算找出来因为采用的是输入一行,验证一行所以不能break否则会输入错误 ,此处(注意)
4.//judge 只先做个记录在外面实现本次输出 ,把判断放出来(注意)
5. //找的是入度不等于0的(注意)
6.//每次先拷贝一个入度表 要拷贝前n+1个元素第一个没用
vector<int> tin(indegree,indegree+n+1);
7. //从一开始少输入一组数据 (注意)
8.直接使用vector实现了邻接表的存储 逻辑上是一样的
英语
问题小细节的东西 以及会遇到的情况 要统一汇总一下加强意识