#include<bits/stdc++.h>
using namespace std;
vector<int>arr;
vector<int> leafNodes;
vector<int> visited;
int n;
void find()
{
for (int i = 1; i <= n; i++)
{
int c = 0;
if (arr[i] == 1)
{
c++;
}
if (c == 1 && i != 1)
{
leafNodes[i] = 1;
}
}
}
int main()
{
int T;
cin >> T;
while (T--)
{
cin >> n;
arr = vector<int>(n + 5);
leafNodes = vector<int>(n + 5);
for (int i = 0; i < n - 1; i++)
{
int u, v;
cin >> u >> v;
arr[u]++;
arr[v]++;
}
find();
int zhongjian = 0;
int leaf_0 = 0;
int leaf_1 = 0;
int leaf_w = 0;
char man;
char haha;
for (int i = 1; i <= n; i++)
{
cin >> man;
if (i == 1)
{
haha = man;
}
if (i != 1)
{
if (leafNodes[i] != 1 && man == '?')
{
zhongjian++;
}
if (leafNodes[i] == 1)
{
if (man == '0')
{
leaf_0++;
}
if (man == '1')
{
leaf_1++;
}
if (man == '?')
{
leaf_w++;
}
}
}
}
//最终处理
if (haha == '0')
{
cout << leaf_1 + (leaf_w + 1) / 2 << endl;
}
if (haha == '1')
{
cout << leaf_0 + (leaf_w + 1) / 2 << endl;
}
if (haha == '?')
{
int ans = max(leaf_1, leaf_0) + leaf_w / 2;
if (zhongjian % 2 == 1)
{
ans = max(ans, min(leaf_0, leaf_1) + (leaf_w + 1) / 2);
}
cout << ans << endl;
}
}
}
Iris and Game on the Tree
最新推荐文章于 2024-10-14 09:08:48 发布