[Codeforces Round49F] Session in BSU】的更多相关文章

[题目链接] http://codeforces.com/contest/1027/problem/F [算法] 二分图匹配 [代码] #include<bits/stdc++.h> #pragma GOC optimize("Ofast") using namespace std; ; struct edge { int to,nxt; } e[MAXN << ]; int n,q,len,ans,tot; ],match[MAXN << ],he…
题目直通车:Codeforces 1027F. Session in BSU 思路: 对第一门考试,使用前一个时间,做标记,表示该时间已经用过,并让第一个时间指向第二个时间,表示,若之后的考试时间和当前第一个时间冲突时,可以找到当前第二个时间来代替 对每一门考试,如果前一个时间没有被使用过,直接用前一个时间,否则看前一个时间和后一个时间分别可以指向哪一个时间,假设指向x,y,看x和y的状态和大小,如果x,y都已经使用过,表示无解,否则的话,选择较小的,并更新时间指向的状态 时间的指向状态更新需要…
题目传送门 传送门I 传送门II 传送门III 题目大意 有$n​$门科目有考试,第$i​$门科目有两场考试,时间分别在$a_i, b_i\ \ (a_i < b_i)​$,要求每门科目至少参加一场考试,不能在同一个时间参加两场考试,问最后参加的考试最早的时间是什么. 这几天,我怎么做的都是水题Emm.... 考虑先将$a_i, b_i$离散化. 对于每一门考试,在$a_i, b_i$间连一条无向边. 对于每个连通块,讨论: 如果边数大于点数,显然无解 如果边数等于点数,那么答案必须大于等于点权…
题目链接 \(Description\) 有\(n\)个人都要参加考试,每个人可以在\(ai\)或\(bi\)天考试,同一天不能有两个人考试.求最晚考试的人的时间最早能是多少.无解输出-1. \(Solution\) 把每个人向\(ai,bi\)连边.对于每个连通块单独考虑. 记点数为n,边数为m.可以发现当某一连通块n>m(n=m+1)时,可以有一个点不选(最大的): 当n=m时,所有点都要选:n<m时,无解. 用并查集维护连通,顺便维护最大.次大值.当第一次出现环时,即n=m:第二次出现就…
F. Session in BSU https://codeforces.com/contest/1027/problem/F 题意: n场考试,每场可以安排在第ai天或者第bi天,问n场考完最少需要多少天. 分析: 将所有的a与b连边,一条边相当于一场考试,一个点相当于一个考试时间,每条边需要找一个点. 那么在一个联通块中,边数>点数,无解(这些考试都只能在这个联通块内的点考). 如果边数=点数,那么相当于出现了环,每条边和一个点匹配,即n场考试,n个考试时间,所以这个联通块内的答案就是最大的…
题目链接 codeforces1027F. Session in BSU 题解 二分图匹配就fst了....显然是过去的,不过tle test87估计也pp了,好坑 那么对于上面做匹配的这个二分图分情况讨论一下 考虑当前的联通块: 边数大于点数:这样肯定是无解的 边数 = 点数:这是一棵基环树,每个日期都会被用,输出最大值 边数 < 点数:这是一棵树,输出次大值 并查集维护一下联通块 代码 #include<cstdio> #include<cstring> #include…
题意: 有n门考试,每门考试都有两个时间,存在几门考试时间冲突,求考完所有的考试,所用的最后时间的最小值 解析: 对于时间冲突的考试 就是一个联通块 把每个考试看作边,两个时间看作点,那么时间冲突的考试即为一个连通块 对于一个连通块 1.如果边数等于点数 即为一个基环树,那么明显 这个连通块的最后时间为 权值最大的点 2.如果边数小于点数 即为一个树,那么连通块的最后时间为 权值次大的点(画画图) 3.如果边数大于点数 那么就冲突了, 输出-1就好了 离散化一下 #include <bits/s…
题面 传送门 思路 真是一道神奇的题目呢 题目本身可以转化为二分图匹配问题,要求右半部分选择的点的最大编号最小的一组完美匹配 注意到这里左边半部分有一个性质:每个点恰好连出两条边到右半部分 那么我们可以利用这个性质 考虑一个左边的点和它右边联通的两个点,发现这两个点只能选择一个和这个左边的点匹配 那么我们考虑把这个点点匹配的模型转化成点边匹配 我们在同一个左边点连的两个右边点之间连边,那么问题就变成了一个点和一条相邻的边匹配,求完美匹配的问题了 而这个问题,我们显然可以用并查集来很好的解决 考虑…
题意 有 \(n\) 门课程,每门课程可以选择在 \(a_i\) 或者 \(b_i\) 天参加考试,每天最多考一门,问最早什么时候考完所有课程. \(n\leq 10^6\). 分析 类似 [BZOJ4883]棋盘上的守卫 一题. 将每门课程对应的两天连边,如果课程 \(i\) 要在第 \(x\) 天考,则对应边指向 \(x\) . 最后有 \(n\) 天,\(n\) 条有向边,每条边的入度为1,构成了基环树森林. 总时间复杂度为 \(O(nlogn)\) (离散化). 总结:这种 \(A\)…
link 花絮: 这场看起来打得还不错的样子……(别问我是用哪个号打的). 然后听说这题的思想被出了好多次,女生赛也出过,quailty算法,然而当时没反应过来,而且时间不多啦. 题意: 有n个人,每个人有两个时间点可以参加考试,任意两人不能在同一时间点参加考试.问最迟考试的人的考试时间最早是多少? $n\leq 10^6.$ 题解: 离散化,将每人的两个时间点连边.题意可以转化为:给每条边定向满足任意一点入度至多为1,使得每条边指向的点的编号最大值最小. 要满足任意一点入度至多为1,原图必须是…