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(1≤n≤100) 个点
m
(
0
≤
m
≤
m
i
n
(
200
,
n
(
n
−
1
)
2
)
)
m(0\le m\le min(200,\frac{n(n−1)}{2}))
m(0≤m≤min(200,2n(n−1))) 的无向图上玩游戏,双方轮流操作,不能操作者输。
每次操作有以下两种选择:
①:选择图上的一条边,并删除这条边;
②:选择图上一个没有环的连通块,并删除这个连通块中的点与边;
双方均执行最优策略,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(1≤k≤n) 个点,则恰好删去
k
−
1
k-1
k−1 条边(无环的连通分量即一棵树),组成要素的数量减少
2
k
−
1
2k-1
2k−1 ;
显然,无论我们执行何种操作,对组成要素的影响都是奇数,因此,胜负只与组成要素的总数量的奇偶性有关 (所以边甚至可以不读入) 。
参考代码
#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;
}