题意:给出n场考试,每场考试有2天可以通过(第ai与bi天)。每天最多参加一场考试,现在要求所有考试全部通过的最小天数

n<=1e6,1<=a[i]<b[i]<1e9

思路:From https://blog.csdn.net/qq_34454069/article/details/81835772

维护块内最大值,次大值,点数,边数

 #include<cstdio>
#include<cstring>
#include<string>
#include<cmath>
#include<iostream>
#include<algorithm>
#include<map>
#include<set>
#include<queue>
#include<vector>
#include<bitset>
using namespace std;
typedef long long ll;
typedef unsigned int uint;
typedef unsigned long long ull;
typedef pair<int,int> PII;
typedef vector<int> VI;
#define fi first
#define se second
#define MP make_pair
#define mem0(a) memset(a,0,sizeof(a))
#define N 2100000
#define M 51
#define MOD 998244353
#define eps 1e-8
#define pi acos(-1)
#define oo 1e9 struct node
{
int x,y;
}a[N]; int s[N][],b[N],f[N],g[N],v[N],Data[N],c[N]; void prepare(int *x,int n)
{
for(int i=;i<=n;i++) Data[i]=x[i];
sort(Data+,Data+n+);
int m=unique(Data+,Data+n+)-Data-;
for(int i=;i<=n;i++) x[i]=lower_bound(Data+,Data+m+,x[i])-Data;
} int find(int k)
{
if(f[k]!=k) f[k]=find(f[k]);
return f[k];
} int main()
{
int n;
scanf("%d",&n);
int m=;
for(int i=;i<=n;i++) scanf("%d%d",&a[i].x,&a[i].y);
for(int i=;i<=n;i++) b[++m]=a[i].x;
for(int i=;i<=n;i++) b[++m]=a[i].y;
prepare(b,m);
for(int i=;i<=n;i++)
{
c[b[i]]=a[i].x;
c[b[i+n]]=a[i].y;
a[i].x=b[i];
a[i].y=b[i+n];
}
int id=;
for(int i=;i<=m;i++) id=max(id,b[i]);
for(int i=;i<=id;i++)
{
f[i]=i;
g[i]=;
v[i]=;
s[i][]=i;
s[i][]=-;
}
for(int i=;i<=n;i++)
{
int x=find(a[i].x);
int y=find(a[i].y);
if(x!=y)
{
f[x]=y;
g[y]=g[x]+g[y]+;
v[y]=v[x]+v[y];
if(s[x][]>s[y][])
{
s[y][]=s[x][];
if(s[y][]>s[y][]) swap(s[y][],s[y][]);
}
if(s[x][]>s[y][])
{
s[y][]=s[x][];
if(s[y][]>s[y][]) swap(s[y][],s[y][]);
}
}
else g[x]++;
}
int ans=-;
for(int i=;i<=id;i++)
{
if(v[i]==g[i]+) ans=max(ans,s[i][]);
else if(v[i]==g[i]) ans=max(ans,s[i][]);
else
{
ans=-;
break;
}
}
if(ans!=-) printf("%d\n",c[ans]);
else printf("-1\n");
return ;
}

【CF1027F】Session in BSU(dsu,基环树)的更多相关文章

  1. [CF1027F]Session in BSU[最小基环树森林]

    题意 有 \(n\) 门课程,每门课程可以选择在 \(a_i\) 或者 \(b_i\) 天参加考试,每天最多考一门,问最早什么时候考完所有课程. \(n\leq 10^6\). 分析 类似 [BZOJ ...

  2. CF1027F Session in BSU

    link 花絮: 这场看起来打得还不错的样子……(别问我是用哪个号打的). 然后听说这题的思想被出了好多次,女生赛也出过,quailty算法,然而当时没反应过来,而且时间不多啦. 题意: 有n个人,每 ...

  3. cf1027F. Session in BSU(并查集 匈牙利)

    题意 题目链接 $n$个人,每个人可以在第$a_i$天或第$b_i$,一天最多考一场试,问在最优的情况下,最晚什么时候结束 Sol 自己只能想到暴力匈牙利二分图匹配,然而还是被构造数据卡了.. 标算很 ...

  4. CF1027F Session in BSU (并查集+树上构造)

    题目大意:你可以在第$ai$天或者第$bi$天进行第$i$场考试,每天最多进行一场考试,求把所有考试都考完的最早结束时间 由于天数可能很大,需要离散 把问题抽象成一棵树,每个点最多被"分配& ...

  5. Session in BSU CodeForces - 1027F(思维 树 基环树 离散化)

    题意: 有n门考试,每门考试都有两个时间,存在几门考试时间冲突,求考完所有的考试,所用的最后时间的最小值 解析: 对于时间冲突的考试 就是一个联通块 把每个考试看作边,两个时间看作点,那么时间冲突的考 ...

  6. Solution -「基环树」做题记录

    写的大多只是思路,比较简单的细节和证明过程就不放了,有需者自取. 基环树简介 简单说一说基环树吧.由名字扩展可得这是一类以环为基础的树(当然显然它不是树. 通常的表现形式是一棵树再加一条非树边,把图画 ...

  7. codeforces1027F. Session in BSU

    题目链接 codeforces1027F. Session in BSU 题解 二分图匹配就fst了....显然是过去的,不过tle test87估计也pp了,好坑 那么对于上面做匹配的这个二分图分情 ...

  8. CF 1027 F. Session in BSU

    F. Session in BSU https://codeforces.com/contest/1027/problem/F 题意: n场考试,每场可以安排在第ai天或者第bi天,问n场考完最少需要 ...

  9. 【BZOJ1791】【IOI2008】【基环树】island(status第一速度)

      1791: [Ioi2008]Island 岛屿  Time Limit: 20 Sec  Memory Limit: 162 MB Submit: 908  Solved: 159 [Su ...

  10. 『Island 基环树直径』

    Island(IOI 2008) Description 你准备浏览一个公园,该公园由 N 个岛屿组成,当地管理部门从每个岛屿 i 出发向另外一个岛屿建了一座长度为 L_i 的桥,不过桥是可以双向行走 ...

随机推荐

  1. Percona-Tookit工具包之pt-find

      Preface       We used to use "find" command in linux or AIX when we need to get a certai ...

  2. Kotlin的属性委托:无上下文情况下Android的赋值(KAD 15)

    作者:Antonio Leiva 时间:Mar 9, 2017 原文链接:https://antonioleiva.com/property-delegation-kotlin/ 如我们在前面文章中读 ...

  3. 安装配置hadoop

    在master中安装并且配置hadoop (1).将hadoop-2.6.4.tar.gz安装包复制到hadoop文件目录下(直接赋值进去就行) (2).解压安装包haoddp-2.6.4.tar.g ...

  4. Ubuntu 进阶命令——长期不定时更新

    有时候远程连接服务器忽然中断或者不小心关掉了终端界面,正在运行的命令或者程序就会被强制停止.这时候,我们可以借助一些命令来避免这种情况的发生. nohup 不挂断地运行命令 & 在后台运行命令 ...

  5. pandas DataFrame的修改方法

    pandas DataFrame的增删查改总结系列文章: pandas DaFrame的创建方法 pandas DataFrame的查询方法 pandas DataFrame行或列的删除方法 pand ...

  6. Python之tornado框架实现翻页功能

    1.结果如图所示,这里将html页面与网站的请求处理放在不同地方了 start.py代码 import tornado.ioloop import tornado.web from controlle ...

  7. Drools 7.4.1.Final参考手册(六) 用户手册

    用户手册 基础 无状态的知识Session Drools规则引擎拥有大量的用例和功能,我们要如何开始?你无须担心,这些复杂性是分层的,你可以用简单的用例来逐步入门. 无状态Session,无须使用推理 ...

  8. 最短路径——Bellman-Ford算法以及SPFA算法

    说完dijkstra算法,有提到过朴素dij算法无法处理负权边的情况,这里就需要用到Bellman-Ford算法,抛弃贪心的想法,牺牲时间的基础上,换取负权有向图的处理正确. 单源最短路径 Bellm ...

  9. SpringBoot2.0

    建立可执行的Jars和Wars bootJar用于构建可执行的Jar: bootWar用于构建可执行的war. application.properties 不启动web服务器 spring.main ...

  10. P2574 XOR的艺术

    题目描述 AKN觉得第一题太水了,不屑于写第一题,所以他又玩起了新的游戏.在游戏中,他发现,这个游戏的伤害计算有一个规律,规律如下 1. 拥有一个伤害串为长度为n的01串. 2. 给定一个范围[l,r ...