pat-1154

#include<iostream>
#include<vector>
#include<set>
using namespace std;
int n,m;
bool color=true;
struct node
{
	int ll,rr;
 } ;
 vector<node> v;

 int main()
 {   int k;
 	cin>>n>>m;
 	
 	for(int i=0;i<m;i++)
 	{ int tll,trr;
 	cin>>tll>>trr;
 	v.push_back({tll,trr});
 	}
 	cin>>k;
 	while(k--)
 	{  //条件重置 原来a num 都在外面 每弄完一个 总是会留下上次的量,每一次检验的涉及到的所有变量都要条件重置弄对地方,相应的上面的一开始最好不要声明到地方再声明(注意)   
	 int a[100009]={0};
 	   set<int> num;
	  for(int i=0;i<n;i++) 
	  {scanf("%d",&a[i]);
	  //set里面存的是各不相同的元素利用此性质记录颜色个数 
	   num.insert(a[i]);
	    }
		//多组数据检测条件没重置(注意) 尤其是注意一下上一次留下的值  条件重置的位置放错应该是判断for循环外面否则即使有不符合题意的下条边依然可能变为true我们检测的是存在性需要条件重置但每个个例里只能重置一次(注意)     
		color=true;
		    for(int i=0;i<m;i++)
	      
		    {
		     if(a[v[i].ll]==a[v[i].rr] ) 
 		    {
	        	color=false;
				break; 
				}
 	         } 
 		if(color)
 		// k-coloring if it is a proper k-coloring for some positive k, or No if not.
 		printf("%d-coloring\n",num.size());
 		else printf("No\n");
	 }
	 return 0;
 }
 

这题过了样例答案还是错的,最后发现条件重置没有重置全面

总结

1.条件重置  for循环里每一行涉及到的变量都要条件重置,都要保证是全新的

2. //多组数据检测条件没重置(注意) 尤其是注意一下上一次留下的值  条件重置的位置放错应该是判断for循环外面否则即使有不符合题意的下条边依然可能变为true我们检测的是存在性需要条件重置但每个个例里只能重置一次(注意)

3.set是存放各不相同的数据,所以可以计数看输入数据里各不相同的数据有多少

4.这题用的是枚举

英语:

问题

题干如何提取关键信息正确理解以及条件重置的专项练习意识的提高 

 

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值