思想
题目给的样例的意思是
1 (1行)
3 (3个节点)
101 (三个连续的节点的颜色)
1 2 (节点1 ~ 节点2之间有一条边)
2 3 (节点2 ~ 节点3之间有一条边)
#include<bits/stdc++.h>
using namespace std;
const int N=100;
bool isflag=0;
vector<int>Graph[N];//建立的图
char storing[N];
//判断是否美观
void check (int i)
{
int count=0;
for (auto x : Graph[i])
{
if (storing[x] == storing[i]) count++;
}
if (count >= 2) isflag=1;
}
int main()
{
int T;cin>>T;
while(T--)
{
for(int i=0;i<100;i++) storing[i]=0;//初始化字符串
for(int i=0;i<100;i++)
{
Graph[i].clear();//清空图的每一条边
}
int n;cin>>n;
scanf("%s",storing+1);//输入字符串 +1是因为要存'/0'
for (int i=1;i<=n-1;i++)//因为要输入n-1行,为了防止越界,i不从0开始
{
int head,tail;cin>>head>>tail;
Graph[tail].push_back(head);//从tail节点可以走到head节点,说明两个节点是相邻的
Graph[head].push_back(tail); //从head节点可以走到tail节点,说明两个节点是相邻的
}
isflag=0;
for (int i=1;i<=n;i++)
{
check(i);
if (isflag==1) break;
}
if (isflag==1) cout<<"NO"<<'\n';
else cout<<"YES"<<'\n';
}
}