【UOJ#236】[IOI2016]railroad(欧拉回路,最小生成树)
【UOJ#236】[IOI2016]railroad(欧拉回路,最小生成树)
题面
题解
把速度看成点,给定的路段看成边,那么现在就有了若干边,然后现在要补上若干边,以及一条\([inf,\)使得原图存在欧拉回路,那么就变成了求从大往小连边的边长的最小值。
而欧拉回路每个点被来回覆盖的次数左右一定是一样的,假设向右-向左覆盖的次数为\(g_i\),那么如果\(g_i>0\),花费\(1\)的代价向\(i-1\)连边,如果\(g_i>0\),那么则可以不花费代价连边\(i\rightarrow i+1\)。
看起来这样子得到了一个解,实际上欧拉回路还需要满足连通性,再求一遍\(MST\)把图连通就行了。
#include<iostream>
#include<cstdio>
#include<algorithm>
#include"railroad.h"
using namespace std;
#define MAX 400200
#define ll long long
int S[MAX<<2],top,cnt,c[MAX];
int f[MAX];int getf(int x){return x==f[x]?x:f[x]=getf(f[x]);}
struct Line{int u,v,w;}e[MAX];
bool operator<(Line a,Line b){return a.w<b.w;}
long long plan_roller_coaster(vector<int> s,vector<int> t)
{
int n=s.size();ll ans=0;
for(int i=0;i<n;++i)S[++top]=s[i],S[++top]=t[i];
S[++top]=-1e9-100;S[++top]=1e9+100;
sort(&S[1],&S[top+1]);top=unique(&S[1],&S[top+1])-S-1;
for(int &i:s)i=lower_bound(&S[1],&S[top+1],i)-S;
for(int &i:t)i=lower_bound(&S[1],&S[top+1],i)-S;
c[2]=-1;c[top]=1;for(int i=1;i<=top;++i)f[i]=i;
for(int i=0;i<n;++i)c[s[i]+1]++,c[t[i]+1]--;
for(int i=0;i<n;++i)f[getf(s[i])]=getf(t[i]);
for(int i=1;i<=top;++i)c[i]+=c[i-1];
for(int i=2;i<=top;++i)
{
if(c[i]==0)continue;
if(c[i]>0)ans+=1ll*c[i]*(S[i]-S[i-1]);
f[getf(i)]=getf(i-1);
}
for(int i=2;i<top-1;++i)if(getf(i)!=getf(i+1))e[++cnt]=(Line){i,i+1,S[i+1]-S[i]};
sort(&e[1],&e[cnt+1]);
for(int i=1;i<=cnt;++i)
if(getf(e[i].u)!=getf(e[i].v))
f[getf(e[i].u)]=getf(e[i].v),ans+=e[i].w;
return ans;
}
【UOJ#236】[IOI2016]railroad(欧拉回路,最小生成树)的更多相关文章
- 【欧拉回路+最小生成树】SD开车@山东2018省队一轮集训day1
目录 [欧拉回路+最小生成树]SD开车@山东2018省队一轮集训day1 PROBLEM 题目描述 输入 输出 样例输入 样例输出 提示 SOLUTION CODE [欧拉回路+最小生成树]SD开车@ ...
- UOJ #236. 【IOI2016】railroad
Description Anna 在一个游乐园工作.她负责建造一个新的过山车铁路.她已经设计了影响过山车速度的 nn 个特殊的路段(方便起见标记为 00 到 n−1n−1).现在 Anna 必须要把这 ...
- UOJ236 IOI2016 Railroad 差分、欧拉回路、最小生成树
传送门 将"进入路段时速度\(\leq s_i\)"转换为:"进入路段时速度恰好等于\(s_i\),并且铺设铁轨有加速和减速两种,加速无需代价,减速每\(1 km/h\) ...
- [JZOJ 5895] [NOIP2018模拟10.5] 旅游 解题报告 (欧拉回路+最小生成树)
题目链接: https://jzoj.net/senior/#main/show/5895 题目: 题解: 有一个好像比较显然的性质,就是每条边最多经过两次 那么我们考虑哪些边需要经过两次.我们把需要 ...
- P6628-[省选联考 2020 B 卷] 丁香之路【欧拉回路,最小生成树】
正题 题目链接:https://www.luogu.com.cn/problem/P6628 题目大意 给出\(n\)个点的一张完全无向图,\(i\sim j\)的边权是\(|i-j|\). 然后给出 ...
- wawawa8的模板复习计划
wawawa8的模板复习计划 数据结构 //手写堆 [link][https://www.luogu.org/problemnew/show/P3378] //并查集 [link][https://w ...
- 全国青少年信息学奥林匹克分区联赛(N)竞赛大纲
全国青少年信息学(计算机)奥林匹克分区联赛竞赛大纲 一.初赛内容与要求:(#表示普及组不涉及,以下同) 计算机的基本发展 诞生与发展 特点 在现代社会中的应用 计算机系统的基本组成 计算机的工作原理# ...
- UOJ#117. 欧拉回路
#117. 欧拉回路 题目描述 有一天一位灵魂画师画了一张图,现在要你找出欧拉回路,即在图中找一个环使得每条边都在环上出现恰好一次. 一共两个子任务: 这张图是无向图.(50分) 这张图是有向图.(5 ...
- 暑假集训2016day3T1 欧拉回路(UOJ #117欧拉回路)(史上最全的欧拉回路纯无向图/有向图解析)
原题……可惜不会……真是一只大蒟蒻…… ———————————————————————————————— 有一天一位灵魂画师画了一张图,现在要你找出欧拉回路,即在图中找一个环使得每条边都在环上出现恰好 ...
随机推荐
- 百度地图支持https
百度地图SDK, 支持https <script src="http://api.map.baidu.com/api?v=3.0&ak=nbnttGGI6lilllgy2zn ...
- Is there a way to avoid undeployment memory leaks in Tomcat?
tomcat 项目部署问题 - yshy - 博客园http://www.cnblogs.com/yshyee/p/3973293.html jsp - tomcat - their classes ...
- Linux中各个目录作用
对于linux新手来说,最感到迷惑的问题之一就是文件都存在哪里呢?特别是对于那些从windows转过来的新手来说,linux的目录结构看起来有些奇怪哦.比如没有C盘,没有分盘符,一大堆不知道用途的文件 ...
- mybatis异常解决:class path resource [SqlMapConfig.xml] cannot be opened because it does not exist
解决方法: 缺失SqlMapConfig.xml文件.
- centOS7搭建NFS服务器
借鉴别人这篇博客搭建成功的:http://blog.51cto.com/mrxiong2017/2087001 NFS系统:用来共享文件.图片.视频 准备两个centOS7服务器,一个作NFS ser ...
- Laravel 出现 No application encryption key has been specified.
若文件根目录下没有 .env 1..env.example 改名使用命令 copy 修改为 .env 2.使用命令 php artisan key:generate 获取密码,自动保存到 .env3 ...
- python学习笔记(11)--文件与数据格式化
文件的概念: 文件是数据的抽象和集合,是存储在辅助存储器上的数据序列,文件是数据存储的一种形式,文件的展现形态,文本文件和二进制文件. 文本文件输出: f.txt文件保存:“我是中国人” >&g ...
- Python 版百度站长平台链接主动推送脚本
如果自己的网站需要被百度收录,可以在搜索结果中找到,就需要将网站的链接提交给百度.依靠百度的爬虫可能无法检索到网站所有的内容,因此可以主动将链接提交给百度. 在百度的站长平台上介绍了链接提交方法,目前 ...
- list类型功能剖析
append 向后追加 name_list=["eirc","alex","tony"] name_list.append('seven' ...
- Java中的super()使用注意
1)super(参数):调用基类中的某一个构造函数(应该为构造函数中的第一条语句)2)this(参数):调用本类中另一种形成的构造函数(应该为构造函数中的第一条语句)3)super: 它引用当前对象的 ...