zoukankan      html  css  js  c++  java
  • [agc014d] Black and White Tree

    Description

    ​ 有一颗n个点的树,刚开始每个点都没有颜色。

    ​ Alice和Bob会轮流对这棵树的一个点涂色,Alice涂白,Bob涂黑,Alice先手。

    ​ 若最后存在一个白点,使得这个白点所有相邻点都为白色,则Alice胜,否则Bob胜。

    ​ 请问是先手必胜还是后手必胜。

    Input

    ​ 第一行一个整数n。

    ​ 接下来n-1行每行两个整数ai,bi,表示有一条边连接ai,bi。

    Output

    ​ 若先手必胜,输出"First"(不含引号),否则输出"Second"(不含引号)。

    Sample Input

    3
    1 2
    2 3
    

    Sample Output

    First
    

    HINT

    2<=n<=10^5

    保证输入为一棵n个点的树

    本题采用subtask。存在10%10%的数据满足n≤8n≤8。

    Sol

    后手必胜的条件是这棵树有完美匹配,证明大概是:如果先手选了一个叶子的父亲并且和一个叶子匹配,若叶子个数大于2那么先手已经赢了。如果只有一个儿子的话就等同于把这两个点删掉继续进行这个过程。我们通过dfs进行这样的判断。

    Code

    #include <bits/stdc++.h>
    using namespace std;
    int n,x,y;vector<int>e[100005];
    int dfs(int x,int fa)
    {
        int tot=0;
        for(int i=0;i<e[x].size();i++) if(e[x][i]!=fa) tot+=dfs(e[x][i],x);
        if(tot>=2) return tot;else return tot^1;
    }
    int main()
    {
        scanf("%d",&n);
        for(int i=1;i<n;i++) scanf("%d%d",&x,&y),e[x].push_back(y),e[y].push_back(x);
        puts(dfs(1,0)?"First":"Second");
    }
    
    
  • 相关阅读:
    杂题
    jzoj5679
    CF434E
    jzoj6152
    jzoj6150
    mysql 第06章 运算符
    mysql 第05章 数据类型
    mysql 第04章 SQL语句
    mysql 第03章 体系结构
    mysql 第02章 基本操作
  • 原文地址:https://www.cnblogs.com/CK6100LGEV2/p/9489601.html
Copyright © 2011-2022 走看看