洛谷 P4319 变化的道路 解题报告
P4319 变化的道路
题目描述
小 w 和小 c 在 H 国,近年来,随着 H 国的发展,H 国的道路也在不断变化着
根据 H 国的道路法,H 国道路都有一个值 \(w\),表示如果小 w 和小 c 通过这条道路,那么他们的 \(L\) 值会减少 \(w\),但是如果小 w 和 小 c 在之前已经经过了这条路,那么他们的 L 值不会减少
H 国有 \(N\) 个国家,最开始 H 国有 \(N−1\) 条道路,这 \(N−1\) 条道路刚好构成一棵树
小 w 将和小 c 从 H 国的城市 1 出发,游览 H 国的所有城市,总共游览 32766 天,对于每一天,他们都希望游览结束后 L 值还是一个正数, 那么他们出发时 L 值至少为多少
H 国的所有边都是无向边,没有一条道路连接相同的一个城市
输入输出格式
输入格式:
输入第 1 行,一个整数\(N\)
输入第 2 至第 \(N\) 行,每行三个正整数 \(u, v, w\),表示城市 \(u\) 与城市 \(v\) 有一条值为 \(w\) 道路
输入第 \(N+1\) 行,一个整数 \(M\),表示 H 国有 \(M\) 条正在变化的道路
输入第 \(N+2\) 行到第 \(N+M+1\) 行,每行 5 个整数 \(u, v, w, l, r\),表示城市 \(u\) 到城市 \(v\) 有一条值为 \(w\) 的道路, 这条道路存在于第 \(l\) 天到第 \(r\) 天
输出格式:
输出共 32766 行,第 \(i\) 行表示第 \(i\) 天游览的 \(L\) 值至少为多少
说明
对于所有数据 : \(1\leq N\leq 50000, 1\leq l\leq r\leq rm\leq 32766, 1\leq w\leq 10^9\)
线段树分治+LCT维护动态最小生成树,比较裸
注意撤回的时候倒过来撤回,RE了一次
Code:
#include <cstdio>
#include <algorithm>
#include <vector>
#define ll long long
#define fa par[now]
#define ls ch[now][0]
#define rs ch[now][1]
using std::max;
const int N=2e5+10;
const int M=32766;
int ch[N][2],par[N],tag[N],s[N],tot,tmp,n,m;ll sum;
struct node
{
int mx,id;
bool friend operator <(node n1,node n2){return n1.mx<n2.mx;}
}dat[N],mx[N];
bool isroot(int now){return ch[fa][0]==now||ch[fa][1]==now;}
int identity(int now){return ch[fa][1]==now;}
void updata(int now){mx[now]=max(dat[now],max(mx[ls],mx[rs]));}
void connect(int f,int now,int typ){ch[fa=f][typ]=now;}
void Reverse(int now){tag[now]^=1,tmp=ls,ls=rs,rs=tmp;}
void pushdown(int now)
{
if(tag[now])
{
if(ls) Reverse(ls);
if(rs) Reverse(rs);
tag[now]^=1;
}
}
void Rotate(int now)
{
int p=fa,typ=identity(now);
connect(p,ch[now][typ^1],typ);
if(isroot(p)) connect(par[p],now,identity(p));
else fa=par[p];
connect(now,p,typ^1);
updata(p),updata(now);
}
void splay(int now)
{
while(isroot(now)) s[++tot]=now,now=fa;s[++tot]=now;
while(tot) pushdown(s[tot--]);now=s[1];
for(;isroot(now);Rotate(now))
if(isroot(fa))
Rotate(identity(now)^identity(fa)?now:fa);
}
void access(int now)
{
for(int las=0;now;las=now,now=fa)
splay(now),rs=las,updata(now);
}
void evert(int now){access(now),splay(now),Reverse(now);}
void split(int u,int v){evert(u),access(v),splay(v);}
void link(int u,int v){evert(u),par[u]=v;}
void cat(int u,int v){split(u,v),ch[v][0]=par[u]=0,updata(v);}
node query(int u,int v){split(u,v);return mx[v];}
std::vector <int > seg[N];
void Insert(int id,int L,int R,int l,int r,int p)
{
if(L==l&&R==r) {seg[id].push_back(p);return;}
int Mid=L+R>>1;
if(r<=Mid) Insert(id<<1,L,Mid,l,r,p);
else if(l>Mid) Insert(id<<1|1,Mid+1,R,l,r,p);
else Insert(id<<1,L,Mid,l,Mid,p),Insert(id<<1|1,Mid+1,R,Mid+1,r,p);
}
struct edge{int u,v,w;}Edge[N];
void segdivide(int id,int l,int r)
{
std::vector <int > sav;
for(int i=0;i<seg[id].size();i++)
{
int p=seg[id][i],las=0;
int u=Edge[p].u,v=Edge[p].v,w=Edge[p].w;
node tmp=query(u,v);
if(tmp.mx>w)
{
sum=sum+w-tmp.mx;
las=tmp.id;
cat(Edge[las].u,las+n),cat(Edge[las].v,las+n);
link(u,p+n),link(v,p+n);
}
sav.push_back(las);
}
int mid=l+r>>1;
if(l==r)
printf("%lld\n",sum+1);
else segdivide(id<<1,l,mid),segdivide(id<<1|1,mid+1,r);
for(int las,p,i=seg[id].size()-1;~i;i--)
{
p=seg[id][i];
if(las=sav[i])
{
int u=Edge[p].u,v=Edge[p].v;
cat(u,p+n),cat(v,p+n);
sum=sum+Edge[las].w-Edge[p].w;
u=Edge[las].u,v=Edge[las].v;
link(u,las+n),link(v,las+n);
}
}
}
int main()
{
scanf("%d",&n);
for(int u,v,w,i=1;i<n;i++)
{
scanf("%d%d%d",&u,&v,&w);
sum=sum+w;
dat[i+n]=mx[i+n]={w,i};
link(u,i+n),link(v,i+n);
Edge[i]={u,v,w};
}
scanf("%d",&m);
for(int u,v,w,l,r,i=0;i<m;i++)
{
scanf("%d%d%d%d%d",&u,&v,&w,&l,&r);
Edge[i+n]={u,v,w};
dat[i+(n<<1)]=mx[i+(n<<1)]={w,i+n};
Insert(1,1,M,l,r,i+n);
}
segdivide(1,1,M);
return 0;
}
2018.12.8
洛谷 P4319 变化的道路 解题报告的更多相关文章
- 洛谷P4319 变化的道路
题意:给定图,每条边都有一段存在时间.求每段时间的最小生成树. 解:动态MST什么毒瘤...洛谷上还是蓝题... 线段树分治 + lct维护最小生成树. 对时间开线段树,每条边的存在时间在上面会对应到 ...
- 【刷题】洛谷 P4319 变化的道路
题目描述 小 w 和小 c 在 H 国,近年来,随着 H 国的发展,H 国的道路也在不断变化着 根据 H 国的道路法,H 国道路都有一个值 \(w\) ,表示如果小 w 和小 c 通过这条道路,那么他 ...
- 洛谷 P1462 通往奥格瑞玛的道路 解题报告
P1462 通往奥格瑞玛的道路 题目背景 在艾泽拉斯大陆上有一位名叫歪嘴哦的神奇术士,他是部落的中坚力量 有一天他醒来后发现自己居然到了联盟的主城暴风城 在被众多联盟的士兵攻击后,他决定逃回自己的家乡 ...
- 洛谷_Cx的故事_解题报告_第四题70
1.并查集求最小生成树 Code: #include <stdio.h> #include <stdlib.h> struct node { long x,y,c; ...
- 洛谷 P3802 小魔女帕琪 解题报告
P3802 小魔女帕琪 题目背景 从前有一个聪明的小魔女帕琪,兴趣是狩猎吸血鬼. 帕琪能熟练使用七种属性(金.木.水.火.土.日.月)的魔法,除了能使用这么多种属性魔法外,她还能将两种以上属性组合,从 ...
- 洛谷 P2317 [HNOI2005]星际贸易 解题报告
P2317 [HNOI2005]星际贸易 题目描述 输入输出格式 输入格式: 输出格式: 如果可以找到这样的方案,那么输出文件output.txt中包含两个整数X和Y.X表示贸易额,Y表示净利润并且两 ...
- 洛谷 P2606 [ZJOI2010]排列计数 解题报告
P2606 [ZJOI2010]排列计数 题目描述 称一个\(1,2,...,N\)的排列\(P_1,P_2...,P_n\)是\(Magic\)的,当且仅当对所以的\(2<=i<=N\) ...
- 洛谷1303 A*B Problem 解题报告
洛谷1303 A*B Problem 本题地址:http://www.luogu.org/problem/show?pid=1303 题目描述 求两数的积. 输入输出格式 输入格式: 两个数 输出格式 ...
- NOIP2015 D2T3 洛谷2680 BZOJ4326 运输计划 解题报告
前言:个人认为这是历年NOIP中比较简单的最后一题了,因此将自己的思路与大家分享. 题目大意: 给一棵无根树,给出m条路径.允许将树上的一条边的权值改为0.求m条路径长度最大值的最小值.n,m< ...
随机推荐
- 阿里云Ubuntu 14.04 + Nginx + .net core + MySql
前段时间帮朋友写了一个网站,现在做一个记录. .Net Core 安装: curl https://packages.microsoft.com/keys/microsoft.asc | gpg -- ...
- Android 自动化测试及性能数据采集的 Python 脚本
文主要介绍一个基于 uiautomator2 封装的一个 Python 库 android-catcher ,该库的功能主要有对 Android 设备进行 UI 自动化测试 和 采集手机性能数据 ,适 ...
- 运输层(TCP/UDP)详解
TCP和UDP的区别: tcp是面向连接的可靠的传输协议 udp是非连接的不可靠的传输协议 TCP组成 可以看到虽然tcp是面向字节流的,但是其传输的基本单位还是报文(tcp首部和数据,ip报文和ud ...
- VPS挂机赚美刀详细介绍–Alexamaster操作流程
跟 vps 主机打交道时间长了,手里也渐渐积累了些闲置的 vps.让它们这么闲着吧,感觉有些浪费资源:用起来吧,暂时又没有好的项目.一直听说通过 vps挂机可以赚回主机成本,甚至可以盈利.正好这两天有 ...
- 239. [LeetCode ]Sliding Window Maximum
Given an array nums, there is a sliding window of size k which is moving from the very left of the a ...
- DX孟虎点评新兴市场:巴西俄罗斯火爆背后
[亿邦动力网讯]4月3日消息,在第九届中国中小企业电子商务大会暨2014中国(河南)跨境贸易电子商务峰会上,DX公司CEO孟虎对新兴市场做了详细的分析,指出在当今的跨境电商环境下,北美.西欧作为电商成 ...
- Alpha发布用户使用报告
此作业要求参见:[https://edu.cnblogs.com/campus/nenu/2018fall/homework/2325] 组名:可以低头,但没必要 组长:付佳 组员:张俊余 李文涛 孙 ...
- 寒假MOOC学习计划
我选择的是西北工业大学的课程,理由如下: 首先,选择这门课的网友还蛮多的,特意看了一下评价,也不错: 其次,这个课程的排版与我从图书馆借来的一本书内容排版比较符合,可以结合起来一起看,说不定会有更多收 ...
- DB2的编目
D在DB2数据库中,编目(catalog)这个单词很难理解,我自己当初在学习DB2的时候也常常被这个编目搞的很不明白,直到现在我个人也感觉到DB2中编目(catalog)这个术语用的不是很好,具体来说 ...
- Jquery mobile div常用属性
组件 页面 jQuery Mobile 应用了 HTML5 标准的特性,在结构化的页面中完整的页面结构分为 header. content.footer 这三个主要区域. 在 body 中插入内容块: ...