CF 1027 F. Session in BSU
F. Session in BSU
https://codeforces.com/contest/1027/problem/F
题意:
n场考试,每场可以安排在第ai天或者第bi天,问n场考完最少需要多少天。
分析:
将所有的a与b连边,一条边相当于一场考试,一个点相当于一个考试时间,每条边需要找一个点。
那么在一个联通块中,边数>点数,无解(这些考试都只能在这个联通块内的点考)。
如果边数=点数,那么相当于出现了环,每条边和一个点匹配,即n场考试,n个考试时间,所以这个联通块内的答案就是最大的点。
如果边数<点数,那么一定是一棵树,那么所有的最大的时间点就可以不选了,这个联通块内的答案就是次大值。
并查集维护加边,与当期联通块的情况。加入一个条边,合并两个联通块,对新联通块维护最大值和次大值。
代码:
#include<cstdio>
#include<algorithm>
#include<cstring>
#include<cmath>
#include<iostream>
#include<cctype>
#include<set>
#include<vector>
#include<queue>
#include<map>
using namespace std;
typedef long long LL; inline int read() {
int x=,f=;char ch=getchar();for(;!isdigit(ch);ch=getchar())if(ch=='-')f=-;
for(;isdigit(ch);ch=getchar())x=x*+ch-'';return x*f;
} const int N = ; struct Node{
int a,b;
}A[N >> ];
int Num[N], fa[N], fir[N], sec[N], tag[N]; int find(int x) {
return x == fa[x] ? x : fa[x] = find(fa[x]);
}
int main() {
int n = read(), cnt = ;
for (int i=; i<=n; ++i) {
A[i].a = read(), A[i].b = read();
Num[++cnt] = A[i].a, Num[++cnt] = A[i].b;
}
sort(Num + , Num + cnt + );
int lim = cnt;cnt = ;
for (int i=; i<=lim; ++i) if (Num[i] != Num[cnt]) Num[++cnt] = Num[i];
for (int i=; i<=n; ++i) {
A[i].a = lower_bound(Num + , Num + cnt + , A[i].a) - Num;
A[i].b = lower_bound(Num + , Num + cnt + , A[i].b) - Num;
}
for (int i=; i<=cnt; ++i) fa[i] = i, fir[i] = Num[i];
for (int i=; i<=n; ++i) {
int u = find(A[i].a), v = find(A[i].b);
if (u != v) {
fa[v] = u; tag[u] |= tag[v];
if (fir[v] > fir[u]) sec[u] = max(fir[u], sec[v]), fir[u] = fir[v];
else sec[u] = max(sec[u], fir[v]);
}
else if (tag[u]) {
puts("-1"); return ;
}
else tag[u] = ;
}
int Ans = ;
for (int i=; i<=cnt; ++i) {
if (i == find(i)) {
if (tag[i]) Ans = max(Ans, fir[i]);
else Ans = max(Ans, sec[i]);
}
}
cout << Ans; return ;
}
CF 1027 F. Session in BSU的更多相关文章
- [Codeforces 1027 F] Session in BSU [并查集维护二分图匹配问题]
题面 传送门 思路 真是一道神奇的题目呢 题目本身可以转化为二分图匹配问题,要求右半部分选择的点的最大编号最小的一组完美匹配 注意到这里左边半部分有一个性质:每个点恰好连出两条边到右半部分 那么我们可 ...
- codeforces1027F. Session in BSU
题目链接 codeforces1027F. Session in BSU 题解 二分图匹配就fst了....显然是过去的,不过tle test87估计也pp了,好坑 那么对于上面做匹配的这个二分图分情 ...
- Codeforces 1027F. Session in BSU
题目直通车:Codeforces 1027F. Session in BSU 思路: 对第一门考试,使用前一个时间,做标记,表示该时间已经用过,并让第一个时间指向第二个时间,表示,若之后的考试时间和当 ...
- CF 633 F. The Chocolate Spree 树形dp
题目链接 CF 633 F. The Chocolate Spree 题解 维护子数答案 子数直径 子数最远点 单子数最长直径 (最长的 最远点+一条链) 讨论转移 代码 #include<ve ...
- [Codeforces Round49F] Session in BSU
[题目链接] http://codeforces.com/contest/1027/problem/F [算法] 二分图匹配 [代码] #include<bits/stdc++.h> #p ...
- CF #271 F Ant colony 树
题目链接:http://codeforces.com/contest/474/problem/F 一个数组,每一次询问一个区间中有多少个数字可以整除其他所有区间内的数字. 能够整除其他所有数字的数一定 ...
- CF 494 F. Abbreviation(动态规划)
题目链接:[http://codeforces.com/contest/1003/problem/F] 题意:给出一个n字符串,这些字符串按顺序组成一个文本,字符串之间用空格隔开,文本的大小是字母+空 ...
- CF 1138 F. Cooperative Game
F. Cooperative Game 链接 题意: 有10个玩家,开始所有玩家在home处,每次可以让一些玩家沿着边前进一步,要求在3(t+c)步以内,到达终点. 分析: 很有意思的一道题.我们构造 ...
- CF 1041 F. Ray in the tube
F. Ray in the tube 链接 题意: 有两条平行于x轴的直线A,B,每条直线上的某些位置有传感器.你需要确定A,B轴上任意两个整点位置$x_a$,$x_b$,使得一条光线沿$x_a→x_ ...
随机推荐
- 使用Android Studio和Gradle编译NDK项目之Experimental Plugin User Guide
转载自:http://tools.android.com/tech-docs/new-build-system/gradle-experimental Introduction The new exp ...
- 【转】Android之drawable state各个属性详解
我们在定义一个drawable的时候可以通过xml定义的drawable对象.它使得一个图片能在不同的状态下显示不同的图案,比如一个Button,它有pressed,focused,或者其它状态,通过 ...
- es6之类与对象
一.类的定义 class Parent{ constructor(name="mukewang"){ this.name=name; } } let v_parant=new Pa ...
- JSP的域对象的作用范围
<%-- Created by IntelliJ IDEA. User: tT丶 Date: 2017-12-12 Time: 14:53 To change this template use ...
- Spring data JPA先排序再分页。
//工具类,增删改查等等package com.yunqing.service.impl; import java.util.Map; import org.springframework.beans ...
- 以EF形式操作mysql数据库
1.引入Nuget包: 2.书写EF操作上下文 public class MySqlContext:DbContext { protected override void OnConfiguring( ...
- 装饰模式案列(OutputStream)
使用装饰模式进行装饰OutputStream 写入文件成功 装饰类继承OutputStream类 DecorOutputStream package com.wbg.springRedis.decor ...
- ARC声明属性关键字详解(strong,weak,unsafe_unretained,copy)
ARC声明属性关键字详解(strong,weak,unsafe_unretained,copy) 在iOS开发过程中,属性的定义往往与retain, assign, copy有关,我想大家都很熟悉了, ...
- wordpress上传含中文文件名出现乱码
一.首先到FTP里面找到wp-admin/includes/file.php这个文件. 二.查找wp_handle_upload在文件里面找到以下代码. function wp_handle_uplo ...
- Oracle作业4-函数
一.在数据库中的emp和dept表中做如下查询: 1.列出所有分析师(ANALYST)的姓名.编号和部门 SELECT ENAME,EMPNO,E.DEPTNO,DNAME FROM EMP E,DE ...