zoukankan      html  css  js  c++  java
  • 7.25每日一题题解

    树链博弈

    涉及知识点:

    • 博弈论
    • DFS

    solution

    • 假如每层的黑色节点数都为偶数的时候,那么先手是必败的
    • 如果先手选择一个黑点,不翻转他的祖先,那么后手和先手一样,状态是不变的。
    • 如果先手反转他的祖先,后手翻转对应层的祖先,状态还是不变的
    • 这样逐层消去,末状态为与根节点相连的黑点为偶数个,此时翻转祖先不改变结果,依次取黑,后手胜。
    • 否则,若有一层为奇数,则先手可以一步将所有层设为偶数,随后将后手代入上述推导,便是先手胜局

    std:

    #include <iostream>
    #include <algorithm>
    using namespace std;
    
    #include <vector>
    
    const int N = 1010;
    
    vector<int>v[N];
    int depth[N];
    int a[N];
    int ce;
    
    void dfs(int u,int level,int fa)
    {
        ce = max(ce,level);
        if(a[u]){
            depth[level]++;
        }
        for(auto &x : v[u])
        {
            if(x == fa) continue;
            dfs(x,level + 1,u);
        }
    }
    
    int main()
    {
        int n;
        cin >> n;
        for(int i = 1;i <= n;i ++)
        {
            cin >> a[i];
        }
        
        for(int i = 0;i < n - 1;i ++)
        {
            int a,b;
            cin >> a >> b;
            v[a].push_back(b);
            v[b].push_back(a);
        }
        
        dfs(1,1,-1);
        
        int flag = 0;
        
        for(int i = 1;i <= ce;i ++)
        {
            if(depth[i] & 1){
                flag = 1;
            }
        }
        
        if(!flag){
            cout << "Second" << endl;
        }
        else{
            cout << "First" << endl;
        }
        
        
        return 0;
    }
    
  • 相关阅读:
    Vue cli 安装慢的原因和解决记录
    spring-boot
    illustrator 2018 cc
    illustrator 2018 cc
    illustrator 2018 cc
    illustrator 2018 cc- 画板技巧
    Tomcat 用户密码配置
    CentOS7上解决tomcat不能被外部浏览访问
    Ubuntu
    SPI、I2C、UART(转)
  • 原文地址:https://www.cnblogs.com/QFNU-ACM/p/13377198.html
Copyright © 2011-2022 走看看