P2387 [NOI2014]魔法森林

和最小差值生成树差不多

都是用lct维护生成树的题目

本题可以以a排序,再维护b(通常这种二维变量的题都差不多这样,先排序一维)

然后我tm竟然rotate手误打错了一点...调了好久..

然后关于pushup:关于最大值,最小值一类的信息要在pushup中赋初值,而异或和之类的可以不用

就是说不可以用引用中写法的来写..

#include<bits/stdc++.h>
using namespace std;
const int N=5e4+7;
const int M=1e5+7;
int n,m,st[N+M],tot,ans=1<<30,w[N+M];
struct edge{int a,b,u,v;bool operator <(const edge &x)const {return a<x.a;}
}e[M];
struct tree{int ch[2],fa,mx=-1,id=-1;bool rev;
}t[N+M];
void pushup(int x) {t[x].mx=w[x],t[x].id=x;if(t[x].ch[0]&&t[t[x].ch[0]].mx>t[x].mx) t[x].mx=t[t[x].ch[0]].mx,t[x].id=t[t[x].ch[0]].id;if(t[x].ch[1]&&t[t[x].ch[1]].mx>t[x].mx) t[x].mx=t[t[x].ch[1]].mx,t[x].id=t[t[x].ch[1]].id;
}
void rev(int x){swap(t[x].ch[0],t[x].ch[1]);t[x].rev^=1;
}
void pushdown(int x){if(t[x].rev){if(t[x].ch[0])rev(t[x].ch[0]);if(t[x].ch[1])rev(t[x].ch[1]);t[x].rev=0;}
}
bool nroot(int x){return (t[t[x].fa].ch[0]==x)||(t[t[x].fa].ch[1]==x);
}
void rotate(int x){int y=t[x].fa;int z=t[y].fa;bool k=t[y].ch[1]==x;if(nroot(y))t[z].ch[t[z].ch[1]==y]=x;t[x].fa=z;t[y].ch[k]=t[x].ch[k^1];t[t[x].ch[k^1]].fa=y;t[x].ch[k^1]=y;t[y].fa=x;pushup(y);pushup(x);
}
void splay(int x){int y=0,z=x;st[++y]=z;while(nroot(z))st[++y]=z=t[z].fa;while(y)pushdown(st[y--]);while(nroot(x)){y=t[x].fa;z=t[y].fa;if(nroot(y))(t[y].ch[1]==x)^(t[z].ch[1]==y)?rotate(x):rotate(y);rotate(x);}
}
void access(int x){for(int y=0;x;y=x,x=t[x].fa){splay(x);t[x].ch[1]=y;pushup(x);}
}
void makeroot(int x){access(x);splay(x);rev(x);
}
void split(int x,int y){makeroot(x);access(y);splay(y);
}
int findroot(int x){access(x);splay(x);while(t[x].ch[0])x=t[x].ch[0];splay(x);return x;
}
void link(int x,int y){splay(x);t[x].fa=y;
}
bool check(int x,int y){makeroot(x);return findroot(y)==x;
}
int main(){cin>>n>>m;for(int i=1;i<=m;i++){scanf("%d%d%d%d",&e[i].u,&e[i].v,&e[i].a,&e[i].b);}sort(e+1,e+1+m);for(int i=1;i<=m;i++){int u=e[i].u;int v=e[i].v;//t[i+n].mx=e[i].b,t[i+n].id=i+n;w[i+n]=e[i].b;if(u==v)continue;if(!check(u,v)){link(u,i+n),link(i+n,v);}else {split(u,v);int now=t[v].id,maxx=t[v].mx;if(e[i].b>maxx)continue;splay(now),t[t[now].ch[0]].fa=t[t[now].ch[1]].fa=0;link(u,i+n),link(i+n,v);}if(check(1,n)){split(1,n);ans=min(ans,t[n].mx+e[i].a);}}if(ans==1<<30)puts("-1");else printf("%d\n",ans);return 0;
}

 

转载于:https://www.cnblogs.com/Hikigaya/p/10839767.html

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

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

相关文章

C# float/double 减 float/double 等 (X.xxxxxxxxxxxxxE-07)(黑盒测试)

问题 因为没有深究原理&#xff0c;所有只进行了“黑盒测试” 黑盒测试结论&#xff1a; 问题操作结论float/double运算进过一系列的运算后大概率 &#xff01; 0.0 &#xff0c; 而是等于0.00000000000xxxx等于X.xxxxxxxx一串数字的时候不影响下一步继续使用当需要显示fl…

ABP的新旧版本

新版本 https://abp.io/documents/abp/latest/Index https://github.com/abpframework/abp ABP is an open source application framework focused on ASP.NET Core based web application development, but also supports developing other types of applications. 旧版本…

tensorflow的优化器Optimizer

种类如下&#xff0c;其中Optimizer是基类tf.train.Optimizertf.train.GradientDescentOptimizertf.train.AdadeltaOptimizertf.train.AdagradOptimizertf.train.AdagradDAOptimizertf.train.MomentumOptimizertf.train.AdamOptimizertf.train.FtrlOptimizertf.train.ProximalG…

python3支持中文_彻底颓了—— Vim Python 3 接口不支持中文 - Jacky Liu's Blog

折腾了好久才编译出来一个支持 Python 3 的 Vim&#xff0c;谁知居然有这么多问题。 除了 vim.current.buffer 对象不再支持 slice 类型参数以外&#xff0c;今天又发现这个&#xff1a; :py3 vim.current.buffer.append(XXX 模块的控制面板) 结果在 Vim 里加进去的一行看起来是…

如何处理班级过多的问题

在几乎所有我解释了 面向对象程序设计 观点的演讲中&#xff0c;都有人分享这样的评论&#xff1a;“如果我们遵循您的建议&#xff0c;我们将有很多小类。” 我的回答总是一样&#xff1a;“我们当然会的&#xff0c;那太好了&#xff01;” 老实说&#xff0c;即使您不能考虑…

java护照号码校验_学无止境之小白学java……第001天

学习主题&#xff1a;预科阶段对应视频&#xff1a;http://www.itbaizhan.cn/course/id/18.html 对应作业&#xff1a;1. 为什么需要学编程&#xff0c;什么样的人可以做程序员&#xff1f;编程是现实逻辑的表达&#xff0c;编程对数学和英语要求并不高。2. 本行不行&#xff0…

mfc通过信号量保证线程同步

1、声明一个全局handle,记住在cpp里也声明 extern HANDLE uiHandle; 2、创建信号量 uiHandle CreateSemaphore(NULL,1,1,NULL); 3、使用 线程1&#xff1a;WaitForSingleObject(uiHandle,INFINITE); a;//在这里访问同一对象 ReleaseSemaphore(uiHandle,1,NULL); 线程2&#xf…

python字典和集合双向索引_Python字典和集合

字典和集合基础字典是一系列无序元素的组合&#xff0c;其长度大小可变&#xff0c;元素可以任意的删减和改变。不过&#xff0c;这里的元素是一堆键&#xff08;key&#xff09;和值&#xff08;value&#xff09;的配对。 集合没有键和值的配对&#xff0c;是一系列无序的、唯…

ITK读取图像

//读取png图像#include "itkImage.h" #include "itkImageFileReader.h" #include "itkImageFileWriter.h" #include "itkPNGImageIOFactory.h" #include "itkJPEGImageIOFactory.h"int main(int argc, char ** argv) {typed…

documentFragment深入理解

documentFragment是一个保存多个element的容器对象&#xff08;保存在内存&#xff09;当更新其中的一个或者多个element时&#xff0c;页面不会更新。只有当documentFragment容器中保存的所有element更新后再将其插入到页面中才能更新页面。 documentFragment用来批量更新 列如…

在React中处理事件

在使用React渲染RESTful服务后&#xff0c;我们创建了一个简单的UI&#xff0c;用于渲染从RESTful服务获取的员工列表。 作为本文的一部分&#xff0c;我们将扩展同一应用程序以支持添加和删除员工操作。 我们将通过添加/删除员工操作来更新react-app后端api&#xff0c;并修改…

ITK读图VTK显示

ITK 实现图像数据的读取&#xff0c;然后通过连接器把ITK读取的图像数据传输到VTK 然后进行显示。 #include "itkImage.h" #include "itkImageFileReader.h" #include "itkImageToVTKImageFilter.h" #include "itkJPEGImageIOFactory.h&qu…

python如何读二进制文件_python怎么读二进制文件

实际项目中经常遇到读取二进制问题&#xff0c;Python下读取二进制文件一般用Python的文件打开读写相关函数和struct. python学习网&#xff0c;大量的免费python视频教程&#xff0c;欢迎在线学习&#xff01; 1。获取文件名filename&#xff0c;可用对话框,也可以直接手写 2。…

第一阶段冲刺07

第一阶段冲刺07 昨天做了什么&#xff1a;学习了sqlite&#xff0c;但了解到开发非单机App&#xff0c;sqlite不适用于作为后台数据库。 今天准备做什么&#xff1a;学习http协议与Android通过服务器连接MySQL的知识。 遇到的困难&#xff1a;对于开发非单机版App的数据库的选择…

horizon client 无法识别域_「领域驱动设计DDD」事件风暴简介:实现域驱动设计的简便方法...

事件风暴是一种快速&#xff0c;轻量级且未得到充分认可的群体建模技术&#xff0c;它对于加速开发团队而言非常强大&#xff0c;有趣且有用。作为Alberto Brandolini的心血结晶&#xff0c;它是Gamestorming和领域驱动设计&#xff08;DDD&#xff09;原则的综合学习实践。该技…

第十篇 数据类型总结

第十篇 数据类型总结 ## 1 按可变类型or不可变类型 可变数据类型不可变数据类型列表数字字典字符串集合元组## 2 按有序or无序 有序无序字符串字典列表集合元组/数字不存在有序或无序一说## 3 按访问类型&#xff08;查&#xff09; 直接访问顺序访问&#xff08;序列类型&…

OpenCV cvtColor()函数

cv::cvtColor()用于将图像从一个颜色空间转换到另一个颜色空间的转换&#xff08;目前常见的颜色空间均支持&#xff09;&#xff0c;并且在转换的过程中能够保证数据的类型不变&#xff0c;即转换后的图像的数据类型和位深与源图像一致。 void cv::cvtColor(cv::InputArray s…

python读取csv某些行_【Python】Python 读取csv的某行或某列数据

站长用Python写了一个可以提取csv任一列的代码&#xff0c;欢迎使用。 Github链接 csv是Comma-Separated Values的缩写&#xff0c;是用文本文件形式储存的表格数据&#xff0c;比如如下的表格&#xff1a;就可以存储为csv文件&#xff0c;文件内容是&#xff1a; No.,Name,Ag…

logback slf4j_强制Tomcat通过SLF4J / Logback登录

logback slf4j因此&#xff0c;您将JAR可执行Web应用程序与Tomcat捆绑在一起 &#xff08;请务必先阅读其中一个&#xff09;。 但是&#xff0c;一开始就有这些烦人的Tomcat日志&#xff0c;它们独立于我们的应用程序日志且不可自定义&#xff1a; Nov 24, 2012 11:44:02 PM …