思路:
首先奇数个肯定不行。
然后讨论偶数个。
从后向前考虑(因为每个点每次都是连接所有它之前的点)。
repeat begin
对于这个点,如果它连向之前的点,我们就记录一下,加到cnt里。
继续处理前一个点,如果这个点没连,那么我们需要后边至少有一个点能连一下它,所以cnt–
如果此时cnt为0了,说明后边没有能与这个点相匹配的了,返回no
repeat end
如果处理到第一个点还没no,那么
#include <cstdio>
#include <iostream>
#include <string.h>
#include <queue>
#include <algorithm>
typedef long long int lli;
using namespace std;
int a[100020];
int main(){
int t;
cin>>t;
int n;
while(t--){
int cnt = 0;
int flag = 0;
scanf("%d",&n);
a[0] = 2;
for(int i = 1;i <= n-1;++i){
scanf("%d",a+i);
}
if(n&1) flag = 1;
for(int i = n-1;i >= 0 && (!flag);--i){
if(a[i] == 2){
if(cnt == 0){
flag = 1;
break;
}
else{
cnt--;
}
}
else{
cnt++;
}
}
if(flag == 1){
printf("No\n");
}
else{
printf("Yes\n");
}
}
}