pat-1146

#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实现了邻接表的存储 逻辑上是一样的

英语

 

问题小细节的东西 以及会遇到的情况 要统一汇总一下加强意识

 

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值