Day 3 F - Grab The Tree HDU 6324 | 思维 | 博弈

最开始没有读清楚题,理解的是每个点的权值和它的编号相异或最后求和…后来又看成每个点编号异或的和(然后中间有一遍读入循环里i的边界写错了给T了)。题目的意思是

The final score of each player is the bitwise XOR sum of his choosen vertices’ value.

不过不管理解的是那种题意,都是借助异或的性质。因为是不能选相邻的点,异或值又是大于等于零的,所以只要我选上这个它不会是零,那肯定要往多里选,这样T Q其实能选的就是两部分。而如果两边值不为零,先手肯定可以选走值更大的,所以先手必胜。为零的情况就会平局。

#include <bits/stdc++.h>

using namespace std;

#define ll long long

int T;
ll ans;
int main()
{
    scanf("%d", &T);
    while(T)
    {
        int n;
        ans = 0;
        scanf("%d", &n);
        for(int i = 1;i <= n;i++)
        {
            int x;
            scanf("%d", &x);
            ans = ans^x;
        }
        for(int i = 1;i <= n-1;i++)
        {
            int u, v;
            scanf("%d%d", &u, &v);
        }

        if(ans == 0)
            printf("D\n");
        else
            printf("Q\n");
        T--;
    }
    return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值