一些有趣的题-1

魔怔

给一张无向完全图 G G G,每条边有一个颜色,为黑色或者白色。你初始在点 s s s上,你每次可以从当前的点经过一条边走到另一个点上,并将走过的边的颜色翻转。你想要把图中所有的边全都变为黑色,要求最小化走过的边的条数,求这个最小值,或者判断无解。

题解

假设存在解 X X X,意味着白色的边只能经过奇数次,黑色的边只能经过偶数次。用 ( u , v ) (u, v) (u,v)表示一条白边,从 u u u走到 v v v,如果 v v v不是终点,则 v v v必然还连接一条不是 ( u , v ) (u, v) (u,v)的白边,即对于不是终点的 v v v来说,只考虑连接的白边,则其度数为偶数。

记从图 G G G中删去黑色边得到 G ′ G^{'} G,由白色边组成的连通块 b l o c k 1 block_1 block1 b l o c k 2 block_2 block2 b l o c k 3 block_3 block3,…, b l o c k k block_k blockk b l o c k i block_i blocki 的边数为 c n t i cnt_i cnti

  • 如果 G ′ G^{'} G存在2个以上的奇数度点,则不存在解,因为只有起点和 X X X的终点可能是奇数度点。
  • 如果 G ′ G^{'} G有且仅有2个奇数度点。若起点 s s s不在 G ′ G^{'} G中 或者 在 G ′ G^{'} G中但不是奇数度点,则不存在解,理由同上。反之有解且 ∣ X ∣ = ∑ i = 1 k c n t i   +   ( k − 1 ) ∗ 2 |X| = \sum_{i = 1}^kcnt_i ~ + ~(k - 1) * 2 X=i=1kcnti + (k1)2
  • 如果 G ′ G^{'} G没有奇数度点。若 s s s不在 G ′ G^{'} G中,且 ∣ X ∣ = ∑ i = 1 k c n t i   +   ( k − 1 ) ∗ 2   +   2 |X| = \sum_{i = 1}^kcnt_i ~ + ~(k - 1) * 2 ~ + ~2 X=i=1kcnti + (k1)2 + 2。否则, ∣ X ∣ = ∑ i = 1 k c n t i   +   ( k − 1 ) ∗ 2 |X| = \sum_{i = 1}^kcnt_i ~ + ~(k - 1) * 2 X=i=1kcnti + (k1)2

树上游走

给一颗 n n n个节点的树,点集 S S S是好的当且仅当存在一个点到 S S S中的点的距离互不相同,问|S|最大能是多少?且最大点集S的个数?

2 ≤ n ≤ 2000 2 \leq n \leq 2000 2n2000

题解

∣ S ∣ |S| S比较好确定,就是树的直径 D D D加上1,即 S S S任意两点距离互不相同。怎么确定S的个数?(很容易把直径的个数作为S的个数。)考虑任意一条直径上的点 u , u 1 , u 2 , . . . , v u,u_1,u_2,...,v u,u1,u2,...,v。将 u u u视为树根,记 c n t [ i ] cnt[i] cnt[i]:深度为 i i i的节点个数,那么以 u u u为树根对答案的贡献就是 ∏ i = 0 D c n t [ i ] \prod_{i=0}^{D}cnt[i] i=0Dcnt[i]。对于任何一个好的最大点集S,讨论以下两种情况

  • S S S中的点能组成一条直径。因为直径有两个端点 ( u , v ) (u,v) (u,v),所以这条直径组成的点集S被多计算了一次。
  • S S S中的点不能组成一条直径,则 S S S只会被计算一次。证明如下:点集 S S S是由以 u u u为根的树导出来的,那么必定有两个相邻深度的点不是父子,如图红色的点 x , y x,y x,y。假设点集 S S S也能由 p p p为根的树导出( p ∈ S p \in S pS), p p p是深度小于 x x x的点或者深度大于等于 y y y的点,则 S S S中存在两个点处于同一深度,与 S S S中任意两点距离互不相同矛盾;若 p p p x x x,则原来深度为 n + 1 n+1 n+1那层,在以 p p p为根的树中,没有点在 S S S中,即 D + 1 D + 1 D+1个点,不同的两两之间距离只有 D − 1 D - 1 D1个,根据鸽笼原理, S S S中存在两个点处于同一深度。故假设不成立。
    在这里插入图片描述

The least round way

给一个 n ∗ n n * n nn 的矩阵 A A A,每个元素都是非负数,从左上角走到右下角,每次只能向右或者向下走一步。将走过的位置上数字相乘,最后问最少的后缀0的个数?并输出这条路径(假设最后乘积为1080,后缀0的个数为1;最后乘积为100,后缀0的个数为2)
2 ≤ n ≤ 1000 2 \leq n \leq 1000 2n1000

题解
  • 如果元素中有0,则答案有两种可能:0或者1
  • 反之,则所有元素都是正整数,最后的乘积出现0,必须得有因子2和5。对于一条路径,假设其乘积中因子2和因子5的个数为 ( m , n ) (m,n) (m
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值