2021牛客暑期多校训练营4 F题

F题: Just a joke

原题链接:https://ac.nowcoder.com/acm/contest/11255/F

题目大意

Alice 和 Bob 在一张 n ( 1 ≤ n ≤ 100 ) n(1\le n\le 100) n(1n100) 个点 m ( 0 ≤ m ≤ m i n ( 200 , n ( n − 1 ) 2 ) ) m(0\le m\le min(200,\frac{n(n−1)}{2})) m(0mmin(200,2n(n1))) 的无向图上玩游戏,双方轮流操作,不能操作者输。
每次操作有以下两种选择:
①:选择图上的一条边,并删除这条边;
②:选择图上一个没有环的连通块,并删除这个连通块中的点与边;
双方均执行最优策略,Alice 先手,求谁获胜。

题解

签到题,读入每一条边跑并查集,随便推推规律发现一张图的操作次数奇偶性一定,输出答案
一张图有 n + m n+m n+m 个组成要素( n n n 个点与 m m m 条边)。
对于操作①,我们删去一条边,组成要素的数量减少 1 1 1 ;
对于操作②,若我们删去 k ( 1 ≤ k ≤ n ) k(1\le k\le n) k(1kn) 个点,则恰好删去 k − 1 k-1 k1 条边(无环的连通分量即一棵树),组成要素的数量减少 2 k − 1 2k-1 2k1 ;
显然,无论我们执行何种操作,对组成要素的影响都是奇数,因此,胜负只与组成要素的总数量的奇偶性有关 (所以边甚至可以不读入)

参考代码

#include<bits/stdc++.h>
using namespace std;
int n,m;
int main()
{
    std::ios::sync_with_stdio(false),cin.tie(0);
    cin>>n>>m;
    printf((n+m)&1?"Alice":"Bob");//判断奇偶
    return 0;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值