题目大意:你可以在第$ai$天或者第$bi$天进行第$i$场考试,每天最多进行一场考试,求把所有考试都考完的最早结束时间 由于天数可能很大,需要离散 把问题抽象成一棵树,每个点最多被"分配"一条边,现在要删点 画画图可以发现 如果一个联通块是一棵树,那么可以删去至多一个点 如果一个联通块是一个单环树(n个点n条边),那么一个点都不能删掉 如果一个联通块边数大于点数,会发现无法把每个点只分配一条边,不合法,输出-1 判树还是单环树,求一个联通块内点的度总和/2和点数比较即可 并查集维护一…
题意 题目链接 $n$个人,每个人可以在第$a_i$天或第$b_i$,一天最多考一场试,问在最优的情况下,最晚什么时候结束 Sol 自己只能想到暴力匈牙利二分图匹配,然而还是被构造数据卡了.. 标算很神奇. 同样考虑把题目中给出的模型建成二分图,左侧代表每个人,右侧代表每一天的考试 然后我们把右侧每个人能选择的两个点之间连边 这样模型就由二分图转化成了一条链上的问题. 分情况讨论一下: 考虑当前的联通块: 1.边数大于点数:因为每个条边都必须与一个点匹配,因此这样肯定无解 2.边数 = 点数:很…
题目传送门 传送门I 传送门II 传送门III 题目大意 有$n​$门科目有考试,第$i​$门科目有两场考试,时间分别在$a_i, b_i\ \ (a_i < b_i)​$,要求每门科目至少参加一场考试,不能在同一个时间参加两场考试,问最后参加的考试最早的时间是什么. 这几天,我怎么做的都是水题Emm.... 考虑先将$a_i, b_i$离散化. 对于每一门考试,在$a_i, b_i$间连一条无向边. 对于每个连通块,讨论: 如果边数大于点数,显然无解 如果边数等于点数,那么答案必须大于等于点权…
题面 传送门 思路 真是一道神奇的题目呢 题目本身可以转化为二分图匹配问题,要求右半部分选择的点的最大编号最小的一组完美匹配 注意到这里左边半部分有一个性质:每个点恰好连出两条边到右半部分 那么我们可以利用这个性质 考虑一个左边的点和它右边联通的两个点,发现这两个点只能选择一个和这个左边的点匹配 那么我们考虑把这个点点匹配的模型转化成点边匹配 我们在同一个左边点连的两个右边点之间连边,那么问题就变成了一个点和一条相邻的边匹配,求完美匹配的问题了 而这个问题,我们显然可以用并查集来很好的解决 考虑…
link 花絮: 这场看起来打得还不错的样子……(别问我是用哪个号打的). 然后听说这题的思想被出了好多次,女生赛也出过,quailty算法,然而当时没反应过来,而且时间不多啦. 题意: 有n个人,每个人有两个时间点可以参加考试,任意两人不能在同一时间点参加考试.问最迟考试的人的考试时间最早是多少? $n\leq 10^6.$ 题解: 离散化,将每人的两个时间点连边.题意可以转化为:给每条边定向满足任意一点入度至多为1,使得每条边指向的点的编号最大值最小. 要满足任意一点入度至多为1,原图必须是…
题意 有 \(n\) 门课程,每门课程可以选择在 \(a_i\) 或者 \(b_i\) 天参加考试,每天最多考一门,问最早什么时候考完所有课程. \(n\leq 10^6\). 分析 类似 [BZOJ4883]棋盘上的守卫 一题. 将每门课程对应的两天连边,如果课程 \(i\) 要在第 \(x\) 天考,则对应边指向 \(x\) . 最后有 \(n\) 天,\(n\) 条有向边,每条边的入度为1,构成了基环树森林. 总时间复杂度为 \(O(nlogn)\) (离散化). 总结:这种 \(A\)…
#include<stdio.h> #include<string.h> #define N 110000 struct node {     int father,count; }pre[N]; int find(int x) { if(x==pre[x].father) { pre[x].count=0; return x; }         int h=pre[x].father;        pre[x].father=find(pre[x].father);    …
题目传送门 题意:训练指南P246 分析:主要是第二种操作难办,并查集如何支持删除操作?很巧妙的方法:将并查集树上p的影响消除,即在祖先上(sz--, sum -= p),然后为p换上马甲:id[p] = ++pos(可多次),这样id[p]就相当于是新的一个点,那么在Find(x)寻找祖先时要用x的马甲来寻找,即Find (id[x]). #include <bits/stdc++.h> using namespace std; const int N = 2e5 + 5; int rt[N…
L2-007. 家庭房产 给定每个人的家庭成员和其自己名下的房产,请你统计出每个家庭的人口数.人均房产面积及房产套数. 输入格式: 输入第一行给出一个正整数N(<=1000),随后N行,每行按下列格式给出一个人的房产: 编号 父 母 k 孩子1 ... 孩子k 房产套数 总面积 其中 编号 是每个人独有的一个4位数的编号:父 和 母 分别是该编号对应的这个人的父母的编号(如果已经过世,则显示-1):k(0<=k<=5)是该人的子女的个数:孩子i是其子女的编号. 输出格式: 首先在第一行输…
题目大意:输入两个整数n,m(n表示点的个数,m表示操作数).在接下来的m行中,对点的操作有两种 1)M a b . 表示将a.b并到一个集合中 2)S a .表示将a从原来的集合中去除,而成为一个单独的集合 解题思路:并查集 1) 解题思路:并查集,M代表合并,S代表删除,下面讲一下删除操作 大家都知道合并操作就是找到找到两个节点的父亲,修改父亲,如果删除就是将该点的父亲重新设置成自己,这样行不行呢? 这是不行的,比如1,2,3的父亲都是1,现在删除1,1的父亲还是1,2,3也是1,集合还是1…