【UOJ#236】[IOI2016]railroad(欧拉回路,最小生成树)

题面

UOJ

题解

把速度看成点,给定的路段看成边,那么现在就有了若干边,然后现在要补上若干边,以及一条\([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(欧拉回路,最小生成树)的更多相关文章

  1. 【欧拉回路+最小生成树】SD开车@山东2018省队一轮集训day1

    目录 [欧拉回路+最小生成树]SD开车@山东2018省队一轮集训day1 PROBLEM 题目描述 输入 输出 样例输入 样例输出 提示 SOLUTION CODE [欧拉回路+最小生成树]SD开车@ ...

  2. UOJ #236. 【IOI2016】railroad

    Description Anna 在一个游乐园工作.她负责建造一个新的过山车铁路.她已经设计了影响过山车速度的 nn 个特殊的路段(方便起见标记为 00 到 n−1n−1).现在 Anna 必须要把这 ...

  3. UOJ236 IOI2016 Railroad 差分、欧拉回路、最小生成树

    传送门 将"进入路段时速度\(\leq s_i\)"转换为:"进入路段时速度恰好等于\(s_i\),并且铺设铁轨有加速和减速两种,加速无需代价,减速每\(1 km/h\) ...

  4. [JZOJ 5895] [NOIP2018模拟10.5] 旅游 解题报告 (欧拉回路+最小生成树)

    题目链接: https://jzoj.net/senior/#main/show/5895 题目: 题解: 有一个好像比较显然的性质,就是每条边最多经过两次 那么我们考虑哪些边需要经过两次.我们把需要 ...

  5. P6628-[省选联考 2020 B 卷] 丁香之路【欧拉回路,最小生成树】

    正题 题目链接:https://www.luogu.com.cn/problem/P6628 题目大意 给出\(n\)个点的一张完全无向图,\(i\sim j\)的边权是\(|i-j|\). 然后给出 ...

  6. wawawa8的模板复习计划

    wawawa8的模板复习计划 数据结构 //手写堆 [link][https://www.luogu.org/problemnew/show/P3378] //并查集 [link][https://w ...

  7. 全国青少年信息学奥林匹克分区联赛(N)竞赛大纲

    全国青少年信息学(计算机)奥林匹克分区联赛竞赛大纲 一.初赛内容与要求:(#表示普及组不涉及,以下同) 计算机的基本发展 诞生与发展 特点 在现代社会中的应用 计算机系统的基本组成 计算机的工作原理# ...

  8. UOJ#117. 欧拉回路

    #117. 欧拉回路 题目描述 有一天一位灵魂画师画了一张图,现在要你找出欧拉回路,即在图中找一个环使得每条边都在环上出现恰好一次. 一共两个子任务: 这张图是无向图.(50分) 这张图是有向图.(5 ...

  9. 暑假集训2016day3T1 欧拉回路(UOJ #117欧拉回路)(史上最全的欧拉回路纯无向图/有向图解析)

    原题……可惜不会……真是一只大蒟蒻…… ———————————————————————————————— 有一天一位灵魂画师画了一张图,现在要你找出欧拉回路,即在图中找一个环使得每条边都在环上出现恰好 ...

随机推荐

  1. anaconda 出现add 。。。进不去

    找到.condarc 文件  C:\Users\leiyi内 把里面内容替换为 channels: - https://mirrors.tuna.tsinghua.edu.cn/anaconda/pk ...

  2. chrome extensions notifications

    developer.chrome.comhttps://developer.chrome.com/extensions/notifications notification | MDNhttps:// ...

  3. 六、es6 map

    一.map的特点 JavaScript 的对象(Object),本质上是键值对的集合(Hash 结构),但是传统上只能用字符串当作键.这给它的使用带来了很大的限制. 为了解决这个问题,ES6 提供了 ...

  4. [转帖]HTTP 头部解释

    HTTP 头部解释 https://www.cnblogs.com/poissonnotes/p/4844014.html 之前看的太粗了 同事闻起来 referer 才知道自己所知甚少.. ==== ...

  5. Unit 2.前端之html--table(表格),form(表单)标签

    一.table标签 作用:定义html表格.一个table标签元素至少包含 thead(表头),tbody(表主题),还可以有tfoot(表底部) html表格游table元素及一个或者多个tr,th ...

  6. 剑指offer(5)

    题目: 用两个栈来实现一个队列,完成队列的Push和Pop操作. 队列中的元素为int类型. 解法: 一个栈专门用来存数,当需要输出数时,把所有数倒到第二个栈,当然,若此时第二个栈中已经有数了(之前倒 ...

  7. websocket协议握手详解

    最近使用tornado做长链接想着怎么着也要试试websocket协议吧.所以说干就干. 首先要知道websocket是基于http协议的,为什么这么说?因为从协议来说,websocket是借用了一部 ...

  8. MySQL系列:视图基本操作(3)

    1. 视图简介 1.1 视图定义 视图是一种虚拟的表,是从数据库中一个或多个表中导出来的表. 视图可以从已存在的视图的基础上定义. 数据库中只存放视图的定义,并没有存放视图中的数据,数据存放在原来的表 ...

  9. How to proof Pi

    可以把圆想象成一个无限增大角的正多边形,通过倍角公式即勾股定理进行迭代. sin2x=2sinxcosx

  10. Vue数组更新及过滤排序

    前面的话 Vue为了增加列表渲染的功能,增加了一组观察数组的方法,而且可以显示一个数组的过滤或排序的副本.本文将详细介绍Vue数组更新及过滤排序 变异方法 Vue 包含一组观察数组的变异方法,它们将会 ...