codeforces图论1700-2300刷题

codeforces图论

注:本文的分数为clist分数/Codeforces分数

C. Alyona and the Tree

链接:Problem - 682C - Codeforces

分数:1700/1600

思路:

  1. e d v ed_v edv表示 v v v节点的树上前缀和, n d v nd_v ndv表示 v v v节点的权值。
  2. 对于任意节点都有 e d v − e d u ≤ n d v ed_v-ed_u \le nd_v edvedundv,所以移项后等于 e d v − n d v ≤ e d u ed_v-nd_v \le ed_u edvndvedu。故我们只需要判断一个点 v v v上面的祖先节点中的最小权值是否小于它即可。
  3. 最后注意,如果一个节点不满足要求,需要删掉这棵子树,我们的处理方式可以从下到上。

E. New Reform

链接:Problem - 659E - Codeforces

分数:1700/1600

思路:

  1. 一个连通块内有一个环就一定不会有任何点孤立,没有环的就是一棵树,则会有一个点孤立。
  2. 用类似tarjan的方法判环即可。

D. Lakes in Berland

链接:Problem - 723D - Codeforces

分数:1700/1600

思路:

  1. 搜索水题
  2. 第一个dfs找坑并且记录起点与大小
  3. 第二个dfs填坑。

C. Peaceful Rooks

链接:Problem - 1411C - Codeforces

分数:1702/1700

思路:

  1. 每个车将会占据一个行也会占据一个列,也就是有两个直接的主对角线格子可以选择。
  2. 如果有两辆车同时可以占据两个主对角线格子,那么就会形成一个环,让 a n s ans ans+1。
  3. 使用了并查集判断二次占据。

C. Anna, Svyatoslav and Maps

链接:Problem - 1204C - Codeforces

分数:1716/1700

思路:

  1. 题目有点绕,意思就是在原序列p中选一段子序列能够让走子序列的路径和等于原序列(每两个相邻的点走最短路)。
  2. 首先是起手floyd,这不用解释
  3. 其次考虑一个点j什么时候能被删掉 d i s [ l a s t ] [ n d i + 1 ] = = d i s [ l a s t ] [ n d i ] + d i s [ n d i ] [ n d i + 1 ] dis[last][nd_{i+1}] == dis[last][nd_{i}] + dis[nd_i][nd_{i+1}] dis[last][ndi+1]==dis[last][ndi]+dis[ndi][ndi+1]
  4. ps:除了题意很绕,解法还是很直觉的。

B1. Candy Party (Easy Version)

链接:Problem - 1868B1 - Codeforces

分数:1720/1700

思路:

  1. 每个点都给出一个也都接收一个,最后的送入送出图必为一个简单环。
  2. 如果平均值不是整数必然No。
  3. 设每个数字与平均值的差值为 s u b i sub_i subi,假定 s u b i > 0 sub_i>0 subi>0,如果 s u b i sub_i subi可以加上一个数字后等于 2 2 2的整数次幂,则可以完全送出。
  4. 经过观察只有一个数字是连续的0001111000段才能满足要求,那么可以看到,这个送来的数字只能为 l o w b i t ( s u b i ) 。 lowbit(sub_i)。 lowbit(subi)
  5. 所以 s u b i + l o w b i t ( s u b i ) sub_i+lowbit(sub_i) subi+lowbit(subi)为2的整数次幂即可。
  6. 最后记录送入和送出的个数,要求所有的送入送出记录都为0。
  7. 而对于等于均值的,送入任意 2 x 2^x 2x都可以立刻送出,无需考虑。
  8. ps:accmulate这个求和函数赋予的初始值需要也开ll,否则默认int会死的很惨。

A. Pavel and barbecue

链接:Problem - 756A - Codeforces

分数:1720/1700

思路:

  1. 题意又是比较绕,就是说每个串都要在每个位置烤过两次,一次正一次反。
  2. 因为会形成圆排列,如果圆排列的个数不是1,则 a n s = 圆排列的个数 + ( ( ∑ i n b [ i ] % 2 ) = = 1 ) ans=圆排列的个数+((\sum_i^n b[i] \%2)==1) ans=圆排列的个数+((inb[i]%2)==1),否则显然只需要关注 b [ i ] b[i] b[i]的和即可

B. Doremy’s Connecting Plan

链接:Problem - 1889B - Codeforces

分数:1700/1700

思路:

  1. 因为一个连通块内的点共享点权和,所以相当于满足要求就合并到编号小的点上。
  2. 想到如果最后是Yes,那么所有的点都会合并到点1这个集合上。
  3. 那么是否能按照某个顺序直接判断每个点与1的点权和相连即可判断是否为最终集合呢?
  4. 如果一个点能与1相连则有 i ∗ c ≤ S 1 + S i i*c \le S_1+S_i icS1+Si,移项之后有 i ∗ c − S i i*c-S_i icSi,所以只要依次合并这个式子最小的点集即可。
  5. 最后考虑是否会产生漏解,即是否出现:所有剩余点集无法与1合并,但是某几个点集能合并到一起后与1合并的情况呢?
  6. 可以推导出,如果i,j不能和1相连则i,j必不能相连。
  7. 推导式子见洛谷

D. Mouse Hunt

链接:Problem - 1027D - Codeforces

分数:1700/1700

思路:

  1. n个点n条边而且是由点向点链接,必形成内向基环树森林。
  2. 每个基环树分别记录它的权值即可。

B. Longtail Hedgehog

链接:Problem - 615B - Codeforces

分数:1700/1600

思路:

  1. 不太好想的一道拓扑排序
  2. 首先是 u − > v ( u > v ) u->v(u>v) u>v(u>v)的边是无效边,所以可以直接删去,这样建出来的图一定是非环图。
  3. 然后就拓扑dp即可了,每个点都计算一下答案。

D. Beautiful Graph

链接:Problem - 1093D - Codeforces

分数:1700/1700

思路:

  1. 二分图的思维题
  2. 如果一个连通块能分成2部图,则 a n s ans ans将会乘以 2 左部顶点数 + 2 右部顶点数 2^{左部顶点数}+2^{右部顶点数} 2左部顶点数+2右部顶点数

A. DZY Loves Physics

链接:Problem - 444A - Codeforces

分数:1700/1700

思路:

  1. 首先一个环一定比一条链更差,因为多了一条边。
  2. 其次短链一定比长链优,因为要想原链密度减大,需要加入一条密度更大的链,但是反过来想,如果密度最大的链,不过加上那条链都不会增加密度了,所以选择最大密度的链即可。
  3. 详细推导请看洛谷

B. 3-Coloring

链接:Problem - 1503B - Codeforces

分数:1770/1700

思路:

  1. 考虑黑白格子的划分,这里提供一种不用思考坐标转化规律的代码。(其实判断行列和奇偶就可以划分黑白块了)
	queue<pii>q1;
	queue<pii>q2;
	forn(i,1,n,1){
		int cnt = i % 2;
		forn(j, 1, n, 1) {
			if (cnt++ % 2 == 1)
				q1.push({ i,j });
			else
				q2.push({ i,j });
		}
	}
  1. 我们可以在黑块放1,白块放2,如果1放完了还不能放2,我们就在黑块放3,以此类推。至于不能放3那就随便放。

链接:

分数:

思路:

链接:

分数:

思路:

链接:

分数:

思路:

链接:

分数:

思路:

链接:

分数:

思路:

链接:

分数:

思路:

链接:

分数:

思路:

链接:

分数:

思路:

链接:

分数:

思路:

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值