UPC-9559 树链博弈

本文介绍了一种基于树结构的博弈游戏,通过分析黑色结点在各层的分布,判断先手玩家是否必胜。利用深度优先搜索算法,统计每一层黑色结点的数量,若所有层的黑色结点数均为偶数,则先手必败;反之,先手必胜。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

题目传送门

题目描述:

给定一棵n个点的树,其中1号结点是根,每个结点要么是黑色要么是白色
现在小Bo和小Biao要进行博弈,他们两轮流操作,每次选择一个黑色的结点将它变白,之后可以选择任意多个(可以不选)该点的祖先(不包含自己),然后将这些点的颜色翻转,不能进行操作的人输
由于小Bo猜拳经常输给小Biao,他想在这个游戏上扳回一城,现在他想问你给定了一个初始局面,是先手必胜还是后手必胜

输入

第一行一个正整数n
第二行n个整数w1..wn,wi∈{0,1},wi=1表示第i个结点一开始是黑点,否则是白点
接下来n−1行,每行两个正整数u,v表示一条树边(u,v)1≤n≤1000

输出

如果先手必胜,输出First ,否则输出Second

题解:先手存在一个必败态,就是当每一层的黑色结点数都为偶数时,先手必败。

AC代码:

#include <iostream>
#include <algorithm>
#include <cstdio>
#include <cstring>
#include <string>
#include <cmath>
#include <queue>
#include <stack>
#include <vector>
#include <map>
#include <set>
using namespace std;
#define io ios::sync_with_stdio(0),cin.tie(0)
#define inf 0x3f3f3f
const int mod=1e9+7;
const int maxn=1e3+7;
vector <int> e[maxn];
int n,ans,deeps;
int a[maxn],vis[maxn];
void dfs(int u,int f,int deep)
{
    deeps=max(deeps,deep);
    for(int i=0;i<e[u].size();i++)
    {
        int v=e[u][i];
        if(v!=f)
            dfs(v,u,deep+1);
    }
    if(a[u]==1)
        vis[deep]++;
}
int main()
{
    io;
    cin>>n;
    for(int i=1;i<=n;i++)
        cin>>a[i];
    for(int i=1;i<n;i++)
    {
        int st,en;
        cin>>st>>en;
        e[st].push_back(en);
        e[en].push_back(st);
    }
    dfs(1,0,0);
    for(int i=0;i<=deeps;i++)
    {
        if(vis[i]%2==1)
        {
            cout<<"First"<<endl;
            return 0;
        }
    }
    cout<<"Second"<<endl;
    return 0;
}
#include <iostream>
#include <algorithm>
#include <cstdio>
#include <cstring>
#include <string>
#include <cmath>
#include <queue>
#include <stack>
#include <vector>
#include <map>
#include <set>
using namespace std;
#define io ios::sync_with_stdio(0),cin.tie(0)
#define inf 0x3f3f3f
const int mod=1e9+7;
const int maxn=1e3+7;
vector <int> e[maxn];
int n,ans;
int a[maxn],vis[maxn];
void dfs(int u,int f,int deep)
{
    for(int i=0;i<e[u].size();i++)
    {
        int v=e[u][i];
        if(v!=f)
            dfs(v,u,deep+1);
    }
    if(a[u])
    {
        vis[deep]++;
        if(vis[deep]%2==0)
            ans++;
        else
            ans--;
    }
}
int main()
{
    io;
    cin>>n;
    for(int i=1;i<=n;i++)
        cin>>a[i];
    for(int i=1;i<n;i++)
    {
        int u,v;
        cin>>u>>v;
        e[u].push_back(v);
        e[v].push_back(u);
    }
    dfs(1,0,0);
    if(ans!=0)
        cout<<"First"<<endl;
    else
        cout<<"Second"<<endl;
    return 0;
}

 

内容概要:《2024年中国物联网产业创新白皮书》由深圳市物联网产业协会与AIoT星图研究院联合编制,汇集了全国30多个省市物联网组织的智慧。白皮书系统梳理了中国物联网产业的发展历程、现状及未来趋势,涵盖了物联网的概念、产业结构、市场规模、投融资情况、面临的问题与机遇。书中详细分析了感知层、传输层、平台层及应用层的关键技术,探讨了智慧城市、智能工业、车联网、智慧医疗等九大产业物联网应用领域,以及消费物联网的发展特征与热门单品。此外,白皮书还关注了物联网数据安全、法规遵从、人才短缺等挑战,并提出了相应的解决方案。 适用人群:物联网从业者、企业决策者、政策制定者及相关研究机构。 使用场景及目标:①帮助从业者深入了解物联网产业的现状和发展趋势;②为企业决策者提供战略规划依据;③为政策制定者提供政策支持和法规制定参考;④为研究机构提供详尽的数据和案例支持。 其他说明:白皮书不仅限于技术科普,更从宏观角度结合市场情况,多维度讨论了物联网产业生态,旨在为物联网企业、从业者找到最适合的技术应用场景,促进产业健康发展。报告还特别鸣谢了参与市场调研的企业,感谢他们提供的宝贵行业信息。由于时间和资源的限制,报告可能存在信息不充分之处,欢迎各界人士提出宝贵意见。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值