A 题目连接:HDU 5922 Minimum’s Revenge
水题,每次连接上1就行,就是一个等差数列。
1 | #include<iostream> |
B 题目链接:HDU 5923 Prediction
题意:一棵树,每个点代表一条边,每次选择几个点,需要把他的祖先也选上,然后把图里面相应的边连接上,问连接后的图有多少个联通块。
题解:可持续化并查集,每个顶点开一个并查集,维护从根节点到当前节点已经连接的图,再把自己这条边连上。
查询,把所有点的并查集合并一下就可以,然后输出合并后并查集块的个数。
1 | #include<bits/stdc++.h> |
C 题目连接:HUD 5924 Mr. Frog’s Problem
A/B+ B/A 只有在两个数最接近的时候最小,所以如果A<=C<D<=B,C /D+D/C必定小于于等 A/B+B/A所以只有和A B相同的时候才会满足条件。
1 | #include<iostream> |
D 题目连接:HDU 5925 Coconuts
题意:给你一个R*C的矩阵中间有几个n个点,问分成了几个联通块,联通块的大小是多少。
题解:R,C范围是1e9肯定是要离散,离散之后变成了一个不到 2000*2000的矩阵,求联通块数量直接DFS一遍就可以了。
问题来了了,离散之后怎么求每个块的大小呢。
首先你是根据行和列分别离散,计算主要是把离散掉的重新算回来。
如下图加入黄色是你被覆盖的格子,你会把横着离散黑色的格子为一个格子,红色的竖着离散成一个格子。因此,你只要把这些离散的格子从新加回来就行了,另外还要加上中间那一块被离散掉的。
1 | #include<iostream> |
E:题目链接 HDU 5926 Mr. Frog’s Game
水题不解释了。
1 | #include<iostream> |
F 题目链接:HDU 5927 Auxiliary Set
题意:随便选几个点作为不重要的点,其他的全是重要的点,然后把不重要的点中如果是两个不同节点的最近公共祖先就把他变为重要的点,问,选了几个不重要的点,最后重要的点总共有多少个。
题解:数据看的挺吓人的 1e3 组 1e5的数据那命去写啊,实际上没多少。。。。。直接按不重要的点深度排个序,如果是另外两个重要的点的LCA就变成重要的点。
1 | #include<iostream> |
H 题目连接:HDU 5929 Basic Data Structure
简单模拟一下就可以了,记录下一最后一个零的位置,因为到零除了是第一个位置之外全都必定是1.
1 | #include<iostream> |
I -题目链接:HDU - 5930 GCD
这题是真的难理解.这题要是不用线段树大家都会写吧,首先暴力从前面的每个位置到当前位置的GCD ,然后记录每个GCD的个数,更新一个点就是删除一个点,然后再加一个点,就是暴力从前面所有位置到后面所有位置的GCD,减去这个值。把值更新再一次算从前面所有位置到后面所有位置的GCD,然后加上去。
竟然会这个这个,这题就是用线段树维护一下GCD的值,,,就像二分一样,因为会有很长一段的GCD值是一样的,每次不用一个个去找,直接找到前面GCD改变的位置,然后减去上一次GCD改变的位置。也是一种暴力。。。修改其实也是一样的就是把前面GCD和后面GCD求一个GCD,然后前后GCD 的数量相乘
比如 1 1 1 2 4 4 4 前面3个数的GCD是3 个 1 和后面3个数 是 2 那么GCD为 gcd(1,2) 数量就是 3 * 3;
1 | #include<iostream> |
J 题目链接:HDU5931 - Mission Possible
暴力所有速度,推一下公式,发现要么是用初始血量去掉不加血,要么是加血等于掉血数量的时候是最优解。
1 | #include<iostream> |