【5.8】Codeforces 刷题

B. Road Construction

题意:给定n个城市让修路,两两城市之间的路没有限制的话都可以修,使得每个城市都可以通过走最多两条路到达另一个城市, 然后给定m条限制说这些路不能修。

思路:突破点在于 m < n 2 m<\frac n 2 m<2n ,意味着必然存在某个点和其他点都可以连边。以这个点为根发现树只有两层,可以满足 “最多两条路到达另一个城市” 的条件,且只有 n - 1 条边。

AC代码:https://codeforces.com/contest/330/submission/156283768


D. Diverse Garland

略。

AC代码:https://codeforces.com/contest/1108/submission/156285298


C. Friends and Gifts

题意:

n ( n ≤ 2 × 1 0 5 ) n(n≤2×10^5) n(n2×105) 个人互相送礼物,每一个人需要向别人送出一个礼物,同时自己可以收到一个礼物。

如果第 i    ( 1 ≤ i ≤ n ) i\;(1 \le i \le n) i(1in) 个人想要送给第 j j j 个人礼物,那么 f i = j f_i=j fi=j;但如果第 i i i 个人并未选好送给谁,那么 f i = 0 f_i=0 fi=0

现在给出所有的 f i f_i fi,请帮助 f i = 0 f_i=0 fi=0 的人选好送礼对象,使得每一个人都送出一个礼物,且收到一个礼物,保证题目有解。

思路:把没有发出礼物和没有收到礼物的分为两组,然后匹配即可。注意自环的情况,我的处理方法是排序,然后看看是否某一位相等,相等的话和序列末交换即可。这里 O ( n ) O(n) O(n) 的匹配方法。

AC代码:https://codeforces.com/contest/1283/submission/156286649


C. Chocolate Bunny

题意:交互题。有一个前 n n n 个正整数的排列,每次询问 x , y x,y x,y 得到 a x   m o d   a y a_x \bmod a_y axmoday 的值,最多使用 2 n 2n 2n 次询问,猜出这个序列。

第一次做这种交互题,挺有意思的。

  1. 注意把 #define endl '\n' 注释掉。可以 ios 解绑。
  2. 按照格式输出询问,询问答案就会放到缓冲区。记得及时 cout << endl; 清理缓冲区。

思路:

突破点就是 a   m o d   b a \bmod b amodb b   m o d   a b \bmod a bmoda

如果 a > b a>b a>b ,那么 a   m o d   b < b , b   m o d   a = b a \bmod b < b, b \bmod a = b amodb<b,bmoda=b ,根据两次询问就可以猜出来一个数。

AC代码:https://codeforces.com/contest/1407/submission/156288325


C. Link Cut Centroids

题意:给定一棵节点数为 n n n 的树 , 删一条边然后加上一条边 , 使得该树的重心唯一 。(删掉的边和加上的边可以是同一条)

思路:讨论当重心不唯一(有两个重心时)的情况。找到某个叶子节点,把他接到离他更远的那个重心上即可。正确性不会证。

树的重心 - OI wiki

定义:

树的直径:树上的最长简单路。(两次BFS\DFS 或 树形 DP)

树的重心:定义每个点的点权为:每颗子树的大小的最大值,或者为其他点到该点的总距离。则点权最小的点就是重心(最多两个)。(DFS)

树的中心:定义每个点的点权为:子节点到达该点的最长路径。则点权最小的点就是中心(最多两个)。(两次BFS\DFS 或 树形 DP)

AC代码:https://codeforces.com/contest/1406/submission/156292176

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值