codeforces#310 D - Case of Fugitive
题意:
给定N个区间,和m个点,问对于每个区间,是否都存在一个点?要求点不能重复使用,也就是只能匹配一个区间!
思路:
贪心,先对所有的区间 [L,R] 排一下序,优先把 R 小的排在前面,然后L小的排在前面!因为我们要每一个区间都能匹配到一个点,所以对排好序的区间,开始去寻找点!遍历排好序的区间
[Li,Ri] ,二分找到第一个大于 Li 的那个点,如果未能找到点或者这个点 >Ri ,就是不满足条件了。否则找到点的话,就从set中除去这个点!
codeforces#311 D - Vitaly and Cycle
题意:
给定一个无向图,没有重边和自环,求想要得到奇环最少需要加多少条边,和方法总数!
思路:
首先呢,可以看出最多只需加3条边,我们可以分类讨论一下!
1. m=0,就是 n∗(n−1)∗(n−3)/6 ,即加上3条边;
2. 加上2条边的情况,也就是每个连通分量最多2个点,这样的话,加边的方法总数就是 m∗(n−2) ;
3. 加上1条边的情况,就是不存在奇环的时候。
4. 加0条边,就是已经存在奇环了,直接输出 01 就行了!
那么现在的关键就是如何判断无向图是否存在奇环!直接dfs对每个节点染色就行啦!一旦两个相连的节点所染的颜色一样,那么就是存在奇环了!同时我们需要记录下每次dfs过程中两种颜色的节点的个数记为 cnt1,cnt2 ,那么所加的这一条边一定是连接两个颜色相同的点,所以答案要加上 cnt1∗(cnt−1)/2+cnt2∗(cnt2−1)/2 !
*其实难点就是去判奇环,染色也是属于一种比较常见的方法吧!GET~
Codeforces #236 (Div. 2) C-Searching for Graph
题意就是让你构造含N个点的一个图,使得边的总数为 2∗n+p ,同时对于顶点数为K的子图,总边数不超过 2∗k+p,1<=k<=n,5<=n<=24 ,主要就是要求图的边尽量均匀分布嘛,就乱搞一下,具体做法呢,就是假设N个点排成一个环,我们可以选择隔 0,1,2,3,.....n−2 个点来连边,这样的话可以保证图的均匀性!
Codeforces Round #238(div2) D
题意:
给1000000个数,先选择了n个数 Ni ,要你从剩下的数中选择一些数 Mi ,使得 sigma(Ni−1)=sigma(1000000−Mi) ,并输出这写数!
思路:
直接强行上的话,1000000的数据是无力的,所以构造一发,按照题意的定义的话,会发现 x 与
1000000−x+1 是等价的,也就是如果先选择的数里存在 x 的话,我可以通过选择1000000−x+1 达到目的,但是问题就在于先前同时选择了 x 与1000000−x+1 的话,会发现其实这两个数的和就是一个固定的数,也就是如果先前选择了一个等价类的话,后面我们可以通过选择一个未被取走的等价类达到目的。所以这个题就简单啦!(PS:嗯嗯!从数据范围及题目描述要敏锐地看出这是一个强行构造题!)