【LCT】魔法森林(P2387)

正题

P2387


题目大意

给你一个图,每条边有两个全职a,b,现在让你找一条从1到n的路径使得max(a)+max(b)最小


解题思路

对a进行排序,枚举a的最大值,然后取b最小的边,找1到n的最短路径

找最短路径可以用LCT求,对于连边,如果不在一个连通分量内,就直接连起来

否则在两个端点的路径上找一条最大的边,将其断掉,然后连上该边(如果不是更优则不操作)


code

#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
#define ll long long
#define N 100100
using namespace std;
ll n,m,g,x,y,now,ans,top,d[N<<1],v[N<<1];
struct line
{ll x,y,a,b;
}l[N];
bool cmp(line a,line b)
{return a.a<b.a;
}
struct LCT
{#define ls son[x][0]#define rs son[x][1]ll p[N<<1],mx[N<<1],fa[N<<1],son[N<<1][2];bool NR(ll x){return fa[x]&&(son[fa[x]][0]==x||son[fa[x]][1]==x);}bool IRS(ll x){return son[fa[x]][1]==x;}void pushr(ll x){swap(ls,rs);p[x]^=1;return;}void push_down(ll x){if(p[x]){if(ls)pushr(ls);if(rs)pushr(rs);p[x]=0;}return;}void push_up(ll x){if(ls&&v[mx[ls]]>=v[mx[rs]]&&v[mx[ls]]>=v[x])mx[x]=mx[ls];else if(rs&&v[mx[rs]]>=v[mx[ls]]&&v[mx[rs]]>=v[x])mx[x]=mx[rs];else mx[x]=x;return;}void rotate(ll x){ll y=fa[x],z=fa[y],k=IRS(x),g=son[x][!k];if(NR(y))son[z][IRS(y)]=x;if(g)fa[g]=y;son[x][!k]=y;son[y][k]=g;fa[x]=z;fa[y]=x;push_up(y);return;}void Splay(ll x){ll y=x;d[++top]=y;while(NR(y))y=fa[y],d[++top]=y;while(top)push_down(d[top--]);while(NR(x)){if(NR(fa[x])){if(IRS(x)==IRS(fa[x]))rotate(fa[x]);else rotate(x);}rotate(x);}push_up(x);return;}void access(ll x){for(ll y=0;x;x=fa[y=x])Splay(x),rs=y,push_up(x);return;}void make_root(ll x){access(x);Splay(x);pushr(x);return;}ll find_root(ll x){access(x);Splay(x);while(ls)push_down(x),x=ls;Splay(x);return x;}void Split(ll x,ll y){make_root(x);access(y);Splay(y);return;}void link(ll x,ll y){make_root(x);if(find_root(y)!=x)fa[x]=y;return;}void cut(ll x,ll y){make_root(x);if(find_root(y)==x&&fa[y]==x&&!son[y][0]){rs=fa[y]=0;push_up(x);}return;}
}T;
int main()
{scanf("%lld%lld",&n,&m);for(ll i=1;i<=n+m;++i)T.mx[i]=i;for(ll i=1;i<=m;++i)scanf("%lld%lld%lld%lld",&l[i].x,&l[i].y,&l[i].a,&l[i].b);sort(l+1,l+1+m,cmp);ll i=1;ans=1e15;while(i<=m){g=l[i].a;while(l[i].a==g&&i<=m){x=l[i].x;y=l[i].y;v[i+n]=l[i].b;if(T.find_root(x)==T.find_root(y)){T.Split(x,y);now=T.mx[y];if(v[now]>l[i].b){T.cut(l[now-n].x,now);T.cut(l[now-n].y,now);T.link(x,i+n);T.link(y,i+n);}}else{T.link(x,i+n);T.link(y,i+n);}i++;}if(T.find_root(1)==T.find_root(n)){T.Split(1,n);ans=min(ans,g+v[T.mx[n]]);}}if(ans<1e15)printf("%lld",ans);else puts("-1");return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/319320.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

ASP.NET Core SignalR中的流式传输

什么是流式传输&#xff1f;流式传输是这一种以稳定持续流的形式传输数据的技术。流式传输的使用场景有些场景中&#xff0c;服务器返回的数据量较大&#xff0c;等待时间较长&#xff0c;客户端不得不等待服务器返回所有数据后&#xff0c;再进行相应的操作。这时候使用流式传…

codeforces1435 D. Shurikens

D. Shurikens 自己感觉差不多写了个模拟过了59组数据。 明显这题可能和栈扯上关系&#xff0c;因为很想括号匹配求卡特兰数的形式 看了大佬博客后发现真的和栈有关于是学习了一波。 #define IO ios::sync_with_stdio(false);cin.tie();cout.tie(0) #pragma GCC optimize(2) …

YbtOJ#662-交通运输【线段树合并,树状数组】

正题 题目链接:http://www.ybtoj.com.cn/contest/122/problem/2 题目大意 给出nnn个点的一棵有根树&#xff0c;对于每个xxx求&#xff0c;删除点xxx后修改某个点的父节点&#xff08;修改前该点必须有父节点&#xff09;后最小化最大联通块大小。 解题思路 删掉一个点后肯定…

EOJ Monthly 2020.9 Sponsored by TuSimple E. 加密的情书

E加密的情书 本人太菜&#xff0c;只会签到 题意&#xff1a; 一个多位数可以通过加密变成个位数&#xff0c;加密方式为&#xff1a;各个位数上的数相加&#xff0c;直到加成个位数 例如&#xff1a; 123 --》 1236 现在给出加密后的一串密文 问是否存在连续的自然数数列 l …

【线段树】Frog Traveler(CF751D)

正题 CF751D 题目大意 现在有n个点&#xff0c;当你在i时&#xff0c;可以向前跳 0∼ai0\sim a_i0∼ai​ 步&#xff0c;跳到j&#xff0c;然后向后走bjb_jbj​步&#xff0c;现在让你从n开始跳&#xff0c;回答跳到0的最少步数 解题思路 设fif_ifi​为跳到i的最少步数&…

独立版Jexus配置SSL,支持https访问

一、申请证书【腾讯免费证书】二、验证DNS&#xff0c;即解析域名。记录类型选择 TXT &#xff0c;主机记录与证书上的主机记录保持一致&#xff0c;记录值也与证书上的记录值保持一致三、等待DNS验证与CA轮询&#xff0c;轮询成功后即可下载证书四、Jexus用到的是Nginx中的证书…

codeforces1437 E. Make It Increasing——最长上升子序列

E. Make It Increasing 首先让aiai−ia_ia_i-iai​ai​−i这样可以是严格单增变成单调增。 参考官方题解 首先不难得出如果我们根据不同修改的位置分割成若干段&#xff0c;那么若干段是互不影响的&#xff0c;我们只需要求出每一个若干段修改次数的最小值。 如果当前考虑l~r…

P4451-[国家集训队]整数的lqp拆分【生成函数,特征方程】

正题 题目链接:https://www.luogu.com.cn/problem/P4451 题目大意 给出nnn&#xff0c;对于所有满足∑i1main\sum_{i1}^ma_in∑i1m​ai​n且∀ai∈N\forall a_i\in N^∀ai​∈N的序列求 ∑m1∞∏i1mFbiai\sum_{m1}^{\infty}\prod_{i1}^mFbi_{a_i}m1∑∞​i1∏m​Fbiai​​ 其…

莫比乌斯反演+例题

参考1 参考2 参考3 问题引入&#xff1a; 入门题 给定N和M和D&#xff0c;求满足1<x<N,1<y<M且gcd(x,y)D的点对(x,y)的个数 1<N,M<1000000 莫比乌斯函数 μ μ(n) 1 , n1 μ(n) (-1)k, np1 * p2 * … * Pk &#xff08;x有奇数个质因子时为-1&#xff…

【线段树】Optimal Insertion(CF751E)

正题 CF751E 题目大意 给你一个数组a和一个集合b&#xff0c;现在让你把b中的数插入a&#xff0c;使得逆序对最少 解题思路 先计算a中的逆序对 对于b和a的逆序对&#xff0c;可以对数字进行排序&#xff0c;用线段树存下放每个位置的最小代价&#xff0c;然后直接求最小值 …

.net core通过多路复用实现单服务百万级别RPS吞吐

多路复用其实并不是什么新技术&#xff0c;它的作用是在一个通讯连接的基础上可以同时进行多个请求响应处理。对于网络通讯来其实不存在这一说法&#xff0c;因为网络层面只负责数据传输&#xff1b;由于上层应用协议的制订问题&#xff0c;导致了很多传统服务并不能支持多路复…

2020 China Collegiate Programming Contest Weihai Site补题部分

A. Golden Spirit 签到题&#xff0c;首先把所有老人带到对岸&#xff0c;然后在对休息讨论一下即可。 #define IO ios::sync_with_stdio(false);cin.tie();cout.tie(0) #pragma GCC optimize(2) #include<set> #include<map> #include<cmath> #include<…

P5110-块速递推【特征方程,分块】

正题 题目链接:https://www.luogu.com.cn/problem/P5110 题目大意 数列aaa满足 an233an−1666an−2,a00,a11a_n233a_{n-1}666a_{n-2},a_00,a_11an​233an−1​666an−2​,a0​0,a1​1 TTT组询问给出nnn求ana_nan​ 1≤T≤51071\leq T\leq 5\times 10^71≤T≤5107&#xff0c;…

I - Washing clothes

题意&#xff1a; 有n个人会在某时间段来洗衣服&#xff0c;但是只有一台洗衣机&#xff0c;当洗衣机被用时其他人只能手洗&#xff0c;手洗时间为y&#xff08;题目给定&#xff09;&#xff0c;洗衣机的时间为x&#xff0c;x∈[1,y]&#xff0c;问当x分别为[1,y]时&#xff…

【LCT】历史(P4338)

正题 P4338 题目大意 有一棵树&#xff0c;告诉你每个点access的次数&#xff08;带修改&#xff09;&#xff0c;问实链切换的最多次数 解题思路 先考虑离线的做法&#xff1a; 对于点 x&#xff0c;其不同儿子的子树access会使实链切换&#xff08;对于点 x access 同理&…

微软官宣:史上最贵开发工具 75亿美金收购GitHub

微软副总裁红衣主教Scott Gu今天的一封邮件结束了这笔软件历史上最大收购案&#xff0c;微软给全球开发人员的开源代码仓库GitHub投入了75亿美金&#xff0c;确保这一平台的持续健康发展。GitHub为啥愿意被收购&#xff1f;“软件工程这个事情&#xff0c;从来就不是一笔好生意…

codeforces1438 E.Yurii Can Do Everything

E.Yurii Can Do Everything 官方题解 按照题解的意思&#xff0c;由于满足此条件的数量不多&#xff0c;因此可以挖掘某些信息进行暴力。 考虑一个good subarray&#xff1a;[al,al1,…,ar−1,ar][a_l,a_{l1},\dots,a_{r-1},a_r][al​,al1​,…,ar−1​,ar​] 按照题目意思满…

YbtOJ#791-子集最值【三维偏序】

正题 题目链接:http://www.ybtoj.com.cn/contest/123/problem/1 题目大意 给出333个长度为nnn的排列A,B,CA,B,CA,B,C。然后一个下标集合SSS的三元组是 (max{Ai},max{Bi},max{Ci})(i∈S)(max\{A_i\},max\{B_i\},max\{C_i\})(i\in S)(max{Ai​},max{Bi​},max{Ci​})(i∈S) 求…

【主席树】更为厉害(P3899)

正题 P3899 题目大意 给你一棵树&#xff0c;对于每次询问&#xff0c;给出x,k&#xff0c;问你有多少个三元组(y,z)满足x,y,z不同&#xff0c;x,y之间的距离小于k&#xff0c;且x,y都是z的祖先 解题思路 若y的深度小于x&#xff0c;那么一定在x到根节点的路径上&#xff0c…

人工智能——图像分析第二期练习

又和同学肝了半个上午&#xff08;主要是一二节有课&#xff09;&#xff0c;完成了天气图像识别的第二期练习 一开始几个题不难&#xff0c;挺简单的&#xff0c;到后面出现HOG特征拟合svm模型&#xff0c;HOG提取特征&#xff0c;又是现学内容 HOG特征的维数用cv2.HOGDescrip…