是一道水题,前提能读懂题!
有许多点,操作从第二点开始,每个点都有以下两个操作
1: 把当前点与前面所有的点相连
2: 不对当前点做任何操作.
问在最后的这些边的集合中,能否选择一些边,使得这些边没有公共的点,且所有的点都被这些边所覆盖.
题都读懂了,就好做了赛
#include<cstdio>
using namespace std;
int main()
{
int t;
scanf("%d",&t);
while(t--){
int n;
int res=1; //表示当前没有被覆盖的点.
scanf("%d",&n);
for(int i=2;i<=n;i++){
int u;
scanf("%d",&u);
if(u==2 || res==0) //注意当res等于0时,res要++,因为是从最后的边中选择一些边,所以可以把3当做是
//没有被覆盖的(因为就算3的操作为1,它与1,2点连的边,我们也不会去选!),在之后是可以认为可以再次覆盖它的!!!
res++;
else
res--;
}
if(res==0)
printf("Yes\n");
else
printf("No\n");
}
}