cf 786 B 线段树优化建图

cf 786 B

链接

CF

思路

n个点,3种建边方式,规模\(O(n^2)\)
线段树优化建图

注意

读入的数据好坑啊,说好的v,u变成了u,v。
两棵树,一棵出,一棵入。线段树的作用只不过是按照那个形状建边而已,并没啥用。
初始父亲儿子连边,两棵树的叶子结点一一连边,边权为0。(实际中可以直接共用叶子结点)
大佬的图很不错,引用一下
70
然后在把其他关系引用到上面就行了

代码

#include <bits/stdc++.h>
#define ll long long
using namespace std;
const int N=5e5+7;
int read() {int x=0,f=1;char s=getchar();for(;s>'9'||s<'0';s=getchar()) if(s=='-') f=-1;for(;s>='0'&&s<='9';s=getchar()) x=x*10+s-'0';return x*f;
}
int n,q,S;
struct node {int v,nxt;ll q;
}G[N<<4];
int head[N<<3],tot,cnt;
void add(int u,int v,int q,int opt) {if(opt) swap(u,v);G[++tot].v=v;G[tot].q=q;G[tot].nxt=head[u];head[u]=tot;
}
struct seg {#define ls rt<<1#define rs rt<<1|1int id[N<<3];void build(int l,int r,int rt,int opt) {if(l==r) return id[rt]=l,void();id[rt]=++cnt;int mid=(l+r)>>1;build(l,mid,ls,opt);build(mid+1,r,rs,opt);add(id[rt],id[ls],0,opt);add(id[rt],id[rs],0,opt);}void modify(int L,int R,int u,int q,int l,int r,int rt,int opt) {if(L<=l&&r<=R) return add(u,id[rt],q,opt);int mid=(l+r)>>1;if(L<=mid) modify(L,R,u,q,l,mid,ls,opt);if(R>mid) modify(L,R,u,q,mid+1,r,rs,opt);}
}a,b;
struct edge {int id;ll val;edge(int a=0,ll b=0) {id=a,val=b;}bool operator < (const edge &b) const {return val>b.val;}
};
priority_queue<edge> Q;
ll dis[N];
void dij() {memset(dis,0x3f,sizeof(dis));dis[S]=0;Q.push(edge(S,0));while(!Q.empty()) {edge u=Q.top();Q.pop();if(dis[u.id]!=u.val) continue;for(int i=head[u.id];i;i=G[i].nxt) {int v=G[i].v;if(dis[v]>dis[u.id]+G[i].q) {dis[v]=dis[u.id]+G[i].q;Q.push(edge(v,dis[v]));}}}
}
int main() {n=cnt=read(),q=read(),S=read();a.build(1,n,1,0);b.build(1,n,1,1);for(int i=1;i<=q;++i) {int opt=read();if(opt==1) {int u=read(),v=read(),w=read();add(u,v,w,0);} else if(opt==2) {int u=read(),l=read(),r=read(),w=read();a.modify(l,r,u,w,1,n,1,0);} else if(opt==3) {int u=read(),l=read(),r=read(),w=read();b.modify(l,r,u,w,1,n,1,1);}}dij();for(int i=1;i<=n;++i) {if(dis[i]==0x3f3f3f3f3f3f3f3fLL) dis[i]=-1;printf("%I64d ",dis[i]);}return 0;
}

转载于:https://www.cnblogs.com/dsrdsr/p/10798137.html

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

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

相关文章

mysql -uroot -p -P3306 -h192.168.0.111无法远程连接mysql

1 在装有MySQL的机器上登录MySQL mysql -u root -p密码2 执行USE mysql; 3 执行UPDATE user SET host % WHERE user root;这一句执行完可能会报错&#xff0c;不用管它4 执行FLUSH PRIVILEGES; 4---> 刷新权限表&#xff0c;更改后需执行才能生效。 一篇博客&#xff1a;h…

iPhone6和iPhone6 plus的iOS8设计尺寸参考指南

找不到原创了&#xff0c;若侵权&#xff0c;请联系博主删除&#xff01;谢谢

欧几里得

转载于:https://www.cnblogs.com/morui/p/10799359.html

pl/sql下DBMS_OUTPUT.PUT_LINE的输出位置

项目里存储过程中用到DBMS_OUTPUT.PUT_LINE进行输出日志&#xff0c;一开始不知道在哪里看&#xff0c;网上很多都是直接运行后的位置。但是储过程中的日志找了好一会&#xff0c;记录一下。 1、运行时输出位置。 declarein_interval_start_id varchar2(40);in_interval_end_id…

javaweb学习总结(四十五)——监听器(Listener)学习二

一、监听域对象中属性的变更的监听器 域对象中属性的变更的事件监听器就是用来监听 ServletContext, HttpSession, HttpServletRequest 这三个对象中的属性变更信息事件的监听器。 这三个监听器接口分别是ServletContextAttributeListener, HttpSessionAttributeListener 和Ser…

Excel_DATEDIF函数计算工龄、计算年假

基本语法 DATEDIF(开始日期&#xff0c;结束日期&#xff0c;unit) 基本用法&#xff1a; 实战&#xff1a; 1、计算工龄&#xff1a; 2、计算年假 转载于:https://www.cnblogs.com/wodexk/p/10799890.html

Cordova - 彻底搞定IOS编译!

操作系统&#xff1a;OSX10.14 XCode&#xff1a;10.1 Cordova&#xff1a;8.1.2 假设已经配置好了Cordova开发环境&#xff0c;Apple ID你也有&#xff0c;XCode也可以正常工作了&#xff0c;那么就可以继续看这篇文章了&#xff01; 如果你没有看我这篇文章&#xff0c;那么你…

javaweb学习总结(四十四)——监听器(Listener)学习

一、监听器介绍 1.1、监听器的概念 监听器是一个专门用于对其他对象身上发生的事件或状态改变进行监听和相应处理的对象&#xff0c;当被监视的对象发生情况时&#xff0c;立即采取相应的行动。监听器其 实就是一个实现特定接口的普通java程序&#xff0c;这个程序专门用于监听…

第一期冲刺01

1、我昨天的成就 确定了软件所满足的需求 2、遇到什么困难 跟航哥有太多想要实现的&#xff0c;但后续慢慢找到了重点 3、今天的任务 安装安卓studio 配置好编程所需要的环境 转载于:https://www.cnblogs.com/zjm15511858030/p/11065660.html

vue无缝滚动的插件开发填坑分享

写插件的初衷 1.项目经常需要无缝滚动效果&#xff0c;当时写jq的时候用用msClass这个老插件&#xff0c;相对不上很好用。2.后来转向vue在vue-awesome没有找到好的无缝滚动插件&#xff0c;除了配置swiper可以实现但是相对来说太重了&#xff0c;于是自己造了个轮子。 3.在这分…

Spring 注解 @Resource和@Autowired

Resource和Autowired两者都是做bean的注入使用。 其实Resource并不是Spring的注解&#xff0c;他的包是javax.annotation.Resource 需要导入。但是Spring支持该注解的注入。 共同点&#xff1a;两者都可以写在字段和setter方法上。两者如果都写在字段上&#xff0c;就不需要写…

洛谷 P1091 合唱队型

很容易想到维护一个最长上升子序列和一个最长下降子序列。然后枚举一个点k&#xff0c;取所有以k结尾的最长上升子序列和以k开头的最长下降子序列的长度的和中最大的&#xff0c;表示留下的人数。再用总人数减去这个&#xff0c;等于出队人数 另外类似的一道题&#xff1a;最长…

PHP常用的自定义函数

PHP常用的自定义函数 目录 php常用自定义函数类下载php 设置字符编码为utf-8路径格式化(替换双斜线为单斜线)转码打印输出api返回信息字符串截取 方法一:方法二:数组 字符串 对象 json格式的字符串互转强制类型转换php序列化serialize与返回序列化unserialeze创建日志文件获取i…

Spring注解@Component、@Repository、@Service、@Controller区别

很长时间没做web项目都把以前学的那点框架知识忘光了&#xff0c;今天把以前做的一个项目翻出来看一下发现用Component标记一个组件&#xff0c;而网上有的用Service标记组件&#xff0c;我晕就查了一下资料&#xff1a; Spring 2.5 中除了提供 Component 注释外&#xff0c;还…

春第十周作业

作业&#xff1a; 这个作业属于那个课程C语言程序设计II这个作业要求在哪里https://edu.cnblogs.com/campus/zswxy/software-engineering-class2-2018/homework/3162我在这个课程的目标是阅读并学习这个作业在那个具体方面帮助我实现目标知道了我们以后工作所需的是雇主所需的参…

在原生js中的事件监听方法

一、传统事件绑定方法我们在学习的时候&#xff0c;最初接触的事件绑定方式大多是传统事件绑定方法。传统事件绑定方法事例如下&#xff1a; window.οnlοadfunction(){alert("页面已加载"); } document.getElementById("btn").οnclickfunction(){alert(…

MySql修改数据库编码为UTF8

mysql 创建 数据库时指定编码很重要&#xff0c;很多开发者都使用了默认编码&#xff0c;乱码问题可是防不胜防。制定数据库的编码可以很大程度上避免倒入导出带来的乱码问题。 网页数据一般采用UTF8编码&#xff0c;而数据库默认为latin 。我们可以通过修改数据库默认编码方式…

第六次作业(C语言)

心得体会 该题主要涉及知识点有&#xff1a;1、函数的定义&#xff1b;2、函数的调用&#xff08;即prime函数的调用&#xff09;&#xff1b;3、素数的判断&#xff1b;4、大小排序。 看到题时我首先想到了嵌套循环&#xff0c;可是仔细一看题目要求的是用prime函数的调用&…

Javascript系列——对象元素的数组去重实现

概要 这是一篇记录文&#xff0c;记录数组操作对象去重的实现。 需求 有这样一个数组 [{_id: 123,name: 张三 },{_id: 124,name: 李四 },{_id: 123,name: 张三 }] 实际上我们只需要 [{_id: 123,name: 张三 },{_id: 124,name: 李四 }] 去重 简单数组的去重 Array.from(new Set([…

关于__getattribute__

先看一个案例 class Tree(object):def __init__(self,name):self.namenameself.cateplantdef __getattribute__(self, item):if item大树:print(log 大树)return 我爱大树else:return object.__getattribute__(self,item)aaTree(rrrr) print(aa.name) print(aa.cate) 运行结果…