[Codeforces Round49F] Session in BSU
[题目链接]
http://codeforces.com/contest/1027/problem/F
[算法]
二分图匹配
[代码]
#include<bits/stdc++.h>
#pragma GOC optimize("Ofast")
using namespace std;
const int MAXN = 1e6 + ; struct edge
{
int to,nxt;
} e[MAXN << ]; int n,q,len,ans,tot;
int a[MAXN],b[MAXN],ta[MAXN],tb[MAXN],tmp[MAXN << ],match[MAXN << ],head[MAXN << ],visited[MAXN << ]; template <typename T> inline void read(T &x)
{
int f = ; x = ;
char c = getchar();
for (; !isdigit(c); c = getchar()) if (c == '-') f = -f;
for (; isdigit(c); c = getchar()) x = (x << ) + (x << ) + c - '';
x *= f;
}
inline void addedge(int u,int v)
{
tot++;
e[tot] = (edge){v,head[u]};
head[u] = tot;
}
inline bool hungary(int u,int k)
{
int v;
for (int i = head[u]; i; i = e[i].nxt)
{
v = e[i].to;
if (visited[v] != k)
{
visited[v] = k;
if (!match[v] || hungary(match[v],k))
{
match[v] = u;
return true;
}
}
}
return false;
} int main()
{ read(n);
for (int i = ; i <= n; i++)
{
read(a[i]); read(b[i]);
tmp[++len] = a[i]; tmp[++len] = b[i];
}
sort(tmp + ,tmp + len + );
len = unique(tmp + ,tmp + len + ) - tmp - ;
for (int i = ; i <= n; i++)
{
ta[i] = lower_bound(tmp + ,tmp + len + ,a[i]) - tmp;
tb[i] = lower_bound(tmp + ,tmp + len + ,b[i]) - tmp;
}
for (int i = ; i <= n; i++)
{
addedge(ta[i],len + i);
addedge(tb[i],len + i);
}
for (int i = ; i <= len; i++)
{
if (hungary(i,i))
{
ans++;
if (ans == n)
{
printf("%d\n",tmp[i]);
return ;
}
}
}
printf("-1\n"); return ; }
[Codeforces Round49F] Session in BSU的更多相关文章
- Codeforces 1027F. Session in BSU
题目直通车: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 ...
- 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个人,每 ...
随机推荐
- Functional language 函数
一.什么是函数式语言? 函数式语言一类程序设计语言,是一种非冯·诺伊曼式的程序设计语言.函数式语言主要成分是原始函数.定义函数和函数型.这种语言具有较强的组织数据结构的能力,可以把某一数据 ...
- Linux系统安装,组成及开关机
Linux系统安装,组成及开关机 系统安装 swap分区用于实现虚拟内存,文件系统类型是swap. /分区用于存放包括系统程序和用户数据在内的所有数据,文件系统类型是ext4. 系统组成 Linux内 ...
- 「 HDU P3336 」 Count the string
题目大意 给出一个长度为 $n$ 的字符串 $s$ 要求你求出 $s$ 的每一个前缀在 $s$ 中出现的次数之和.$n\le 200000$. 解题思路 暴力的对每一个前缀进行一次匹配,求出出现次数后 ...
- [Algorithm] 5. Kth Largest Element
Description Find K-th largest element in an array. Example In array [9,3,2,4,8], the 3rd largest ele ...
- springBoot启动及发布
1.在项目编辑器(IDEA)中启动 运行springBoot项目Application类中main方法,这两个按钮都可以.如下图: 当然还有我们配置的启动按钮,这是最常用的启动方式,不再赘述,如下图: ...
- Mybatis中collection和association的使用区别
1. 关联-association2. 集合-collection 比如同时有User.java和Card.java两个类 User.java如下: public class User{ privat ...
- FileWriter实现从一个文件中读取内容并写到另一个文件中
FileWriter和FileOutputStream都是向文件写内容,区别是前台一次写一个字符,后者一次写一个字节 package com.janson.day20180827; import ja ...
- centos7修改时间和时区
设置时区同样, 在 CentOS 7 中, 引入了一个叫 timedatectl 的设置设置程序. 用法很简单: # timedatectl # 查看系统时间方面的各种状态 Local time: 四 ...
- python黑科技库:FuckIt.py,让你代码从此远离bug
今天给你推荐的这个库叫 “FuckIt.py”,名字一看就是很黄很暴力的那种,作者是这样介绍它的: FuckIt.py uses state-of-the-art technology to make ...
- js之DOM间接操作
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...