Codeforces 1027F. Session in BSU
题目直通车:Codeforces 1027F. Session in BSU
思路:
对第一门考试,使用前一个时间,做标记,表示该时间已经用过,并让第一个时间指向第二个时间,表示,若之后的考试时间和当前第一个时间冲突时,可以找到当前第二个时间来代替
对每一门考试,如果前一个时间没有被使用过,直接用前一个时间,否则看前一个时间和后一个时间分别可以指向哪一个时间,假设指向x,y,看x和y的状态和大小,如果x,y都已经使用过,表示无解,否则的话,选择较小的,并更新时间指向的状态
时间的指向状态更新需要用 map离散数据并用并查集维护
#include<iostream>
#include<cstdio>
#include<cmath>
#include<queue>
#include<vector>
#include<string.h>
#include<cstring>
#include<algorithm>
#include<set>
#include<map>
#include<fstream>
#include<cstdlib>
#include<ctime>
#include<list>
#include<climits>
#include<bitset>
using namespace std;
#define fio ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);
#define fopen freopen("input.in", "r", stdin);freopen("output.in", "w", stdout);
#define left asfdasdasdfasdfsdfasfsdfasfdas1
#define tan asfdasdasdfasdfasfdfasfsdfasfdas
typedef long long ll;
typedef unsigned int un;
const int desll[][]={{,},{,-},{,},{-,}};
const ll mod=1e9+;
const int maxn=2e6+;
const int maxm=1e6+;
const double eps=1e-;
int m,n;
int ar[maxn];
pair<int,int> pa[maxn];
map<int,int> ma;
bool wa[maxn];
int f[maxn];
int fin(int x)
{
return f[x]==x?x:f[x]=fin(f[x]);
}
int main()
{
scanf("%d",&n);
m=;
for(int i=;i<n;i++)scanf("%d%d",&pa[i].first,&pa[i].second),
ar[m++]=pa[i].first,ar[m++]=pa[i].second;
sort(ar,ar+m);
m=unique(ar,ar+m)-ar;
for(int i=;i<m;i++){
ma[ar[i]]=i;
}
for(int i=;i<m;i++)f[i]=i;
memset(wa,,sizeof(wa));int ans=;
for(int i=;i<n;i++){
int a=pa[i].first,b=pa[i].second;
if(!wa[ma[a]]){
wa[ma[a]]=;
ans=max(ans,a);
f[ma[a]]=ma[b];
continue;
}
int x=fin(ma[a]);
int y=fin(ma[b]);//分别寻找a,b指向的时间
if(wa[x] && wa[y]){
printf("-1\n");
return ;
}
if(wa[x]==false && wa[y]==false){
if(ar[x]<ar[y]){
f[x]=y;//更新时间指向的状态
wa[x]=;
ans=max(ans, ar[x]);
}
else{
f[y]=x;//更新时间指向的状态
wa[y]=;
ans=max(ans, ar[y]);
}
}
else if(!wa[x]){
wa[x]=;
ans=max(ans, ar[x]);
}
else{
wa[y]=;
ans=max(ans, ar[y]);
}
f[ma[a]]=y;//更新时间指向的状态
}
printf("%d\n",ans); return ;
}
Codeforces 1027F. Session in BSU的更多相关文章
- Codeforces 1027F Session in BSU - 并查集
题目传送门 传送门I 传送门II 传送门III 题目大意 有$n$门科目有考试,第$i$门科目有两场考试,时间分别在$a_i, b_i\ \ (a_i < b_i)$,要求每门科目至少参加 ...
- Codeforces.1027F.Session in BSU(思路 并查集)
题目链接 \(Description\) 有\(n\)个人都要参加考试,每个人可以在\(ai\)或\(bi\)天考试,同一天不能有两个人考试.求最晚考试的人的时间最早能是多少.无解输出-1. \(So ...
- [Codeforces Round49F] Session in BSU
[题目链接] http://codeforces.com/contest/1027/problem/F [算法] 二分图匹配 [代码] #include<bits/stdc++.h> #p ...
- CF 1027 F. Session in BSU
F. Session in BSU https://codeforces.com/contest/1027/problem/F 题意: n场考试,每场可以安排在第ai天或者第bi天,问n场考完最少需要 ...
- codeforces1027F. Session in BSU
题目链接 codeforces1027F. Session in BSU 题解 二分图匹配就fst了....显然是过去的,不过tle test87估计也pp了,好坑 那么对于上面做匹配的这个二分图分情 ...
- Session in BSU CodeForces - 1027F(思维 树 基环树 离散化)
题意: 有n门考试,每门考试都有两个时间,存在几门考试时间冲突,求考完所有的考试,所用的最后时间的最小值 解析: 对于时间冲突的考试 就是一个联通块 把每个考试看作边,两个时间看作点,那么时间冲突的考 ...
- [Codeforces 1027 F] Session in BSU [并查集维护二分图匹配问题]
题面 传送门 思路 真是一道神奇的题目呢 题目本身可以转化为二分图匹配问题,要求右半部分选择的点的最大编号最小的一组完美匹配 注意到这里左边半部分有一个性质:每个点恰好连出两条边到右半部分 那么我们可 ...
- [CF1027F]Session in BSU[最小基环树森林]
题意 有 \(n\) 门课程,每门课程可以选择在 \(a_i\) 或者 \(b_i\) 天参加考试,每天最多考一门,问最早什么时候考完所有课程. \(n\leq 10^6\). 分析 类似 [BZOJ ...
- CF1027F Session in BSU
link 花絮: 这场看起来打得还不错的样子……(别问我是用哪个号打的). 然后听说这题的思想被出了好多次,女生赛也出过,quailty算法,然而当时没反应过来,而且时间不多啦. 题意: 有n个人,每 ...
随机推荐
- 恢复误删除表黑科技之relay log大法(续)
Preface I've stuck twice in my previous experiments in backing up dropped tables.I am still ...
- hnust 原石法阵
问题 F: 原石法阵 时间限制: 1 Sec 内存限制: 128 MB提交: 1098 解决: 161[提交][状态][讨论版] 题目描述 WZH有一个由原石构成的n阶三角形魔法阵,三角形魔法阵如 ...
- FOJ Problem 1016 无归之室
Problem 1016 无归之室 Accept: 926 Submit: 7502Time Limit: 1000 mSec Memory Limit : 32768 KB Prob ...
- 第八章 Internet控制报文协议
Internet控制报文协议 首先,我们必须先清楚,IP协议本身没有为终端系统提供直接的方法来发现那些发往目的地址失败的IP数据包,并且IP没有提供直接的方式来获取诊断信息,那么我们的故事来了. In ...
- 了解Spark源码的概况
本文旨在帮助那些想要对Spark有更深入了解的工程师们,了解Spark源码的概况,搭建Spark源码阅读环境,编译.调试Spark源码,为将来更深入地学习打下基础. 一.项目结构 在大型项目中,往往涉 ...
- uoj228:基础数据结构练习题
题意:http://uoj.ac/problem/228 sol :线段树开根操作 对于节点x,可以在max[x]-min[x]<=1时直接做,转化为区间减或区间覆盖 #include< ...
- 收藏一个JavaScript字符串连接方法
最近在看一同事写的代码时,有一个字符串用了一堆"+"号,看了半天没明天到底会输出什么样的内容,就想到用字符串连接的类,把以前的方法写成了类的方式,方便调用.下面的类支持实例调用和静 ...
- html li css选中状态切换
思路:点击当前li元素后是用removeClass()删除所有兄弟元素(使用siblings()获取)的class样式,然后使用addClass()为当前li添加class. 具体演示如下: 1.HT ...
- Tomcat学习笔记(九)
Tomcat Session管理 Catalina通过一个称为Session管理器的组件来管理建立Session对象,该组件由org.apache.catalina.Manager接口表示.Sessi ...
- 从Jetty、Tomcat和Mina中提炼NIO构架网络服务器的经典模式
如何正确使用NIO来构架网络服务器一直是最近思考的一个问题,于是乎分析了一下Jetty.Tomcat和Mina有关NIO的源码,发现大伙都基于类似的方式,我感觉这应该算是NIO构架网络服务器的经典模式 ...