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.这题用的是枚举
英语:
问题
题干如何提取关键信息正确理解以及条件重置的专项练习意识的提高
标签:trr,pat,int,1154,重置,set,条件,include 来源: https://blog.csdn.net/m0_45359314/article/details/112742201