题意:一个2行C列的矩形网格图,网格上的每个点代表一个城市,相邻的城市之间有一条道路 一开始每条道路都是堵塞的,堵塞即为不可经过.经过一些操作后,可能某些道路通畅了,也可能某些道路堵塞了 多次询问,询问两个城市是否联通 C,q<=1e5 思路:From https://www.cnblogs.com/MashiroSky/p/5973686.html #include<cstdio> #include<cstring> #include<string> #incl…
用线段树维护建图,即把用线段树把每个区间都标号了,Tree1中子节点有到达父节点的单向边,Tree2中父节点有到达子节点的单向边. 每次将源插入Tree1,汇插入Tree2,中间用临时节点相连.那么Tree1中的所用子节点都可以到达,Tree2中的所用子节点. 感觉很有道理啊,以前从来没用用线段树这样维护过建图.分层图最短路没有像BZOJ2763可以直接向先一层连边,因为边已经很多了. #include <cstdio> #include <iostream> #include &…
嘟嘟嘟 省选Day1T2不仅考了字符串,还考了线段树优化建图.当时不会,现在赶快学一下. 线段树能优化的图就是像这道题一样,一个点像一个区间的点连边,或一个区间像一个点连边.一个个连就是\(O(n ^ 2)\)复杂度了,当然承受不起.于是就有了线段树了. 原理很简单,就是把一个连续区间的点合并成线段树上的一个点,这样最多有\(nlogn\)个点.但仅仅这样还不对,所以我们要建两棵树,一个是入度树,一个是出度树. 对于入度树,每一个点要像左右儿子连边,因为如果这个有人像这个点所代表的区间连边,那么…
题意: 有n个点,q个询问, 每次询问有一种操作. 操作1:u→[l,r](即u到l,l+1,l+2,...,r距离均为w)的距离为w: 操作2:[l,r]→u的距离为w 操作3:u到v的距离为w 最终求起点到其他点的最短距离,到达不了输出-1 题解 线段树优化建图+最短路... 不知道这种东西,百度了一下,好像最早的是POI2015的PUS,然后2017/2018的oi也都出过, 还是要见识一下的... 顺便记录一下,封装好的djisktra和graph 代码如下: #include <bit…
原文链接https://www.cnblogs.com/zhouzhendong/p/CF1045A.html 题目传送们 - CF1045A 题意 你有 $n$ 个炮,有 $m$ 个敌人,敌人排成一列,编号从 $1$ 到 $m$ . 对于每门炮,可能是以下 3 种类型: 1. 给定 $K$ ,以及一个包含 $K$ 个元素的集合,该炮最多集合内的一个敌人.保证对于所有这种类型的炮 $\sum K \leq 10^5$ . 2. 给定 $L,R$ ,该炮最多可以消灭区间 $[L,R]$ 中的一个敌…
Solution 一个点向一个区间内的所有点连边, 可以用线段树优化建图来优化 : 前置技能传送门 然后就得到一个有向图, 一个联通块内的炸弹可以互相引爆, 所以进行缩点变成$DAG$ 然后拓扑排序. 由于一次引爆的炸弹 一定是一个连续的区间内, 所以只需要记录左右边界, 并将左右边界转移给能到达它的联通块. 没写手工栈一直RE的我心里$mmp$啊. 为什么网上的题解都不写手工栈$QAQ$ Code #include<cstdio> #include<cstring> #inclu…
传送门 看完题应该都知道是网络流了吧. 但是第二种武器直接建图会gg. 因此我们用线段树优化建图. 具体操作就是,对于这m个人先建一棵线段树,父亲向儿子连容量为inf的边,最后叶子结点向对应的人连容量为1的边. 这样给第二种武器对应连边的时候直接给区间连边就行了. 对于操作三,我们直接贪心流掉两个人,剩下的一个人不流就行了. 代码: #include<bits/stdc++.h> #define N 200005 #define inf 0x3f3f3f3f #define lc (p<…
[BZOJ3681]Arietta Description Arietta 的命运与她的妹妹不同,在她的妹妹已经走进学院的时候,她仍然留在山村中.但是她从未停止过和恋人 Velding 的书信往来.一天,她准备去探访他.对着窗外的阳光,临行前她再次弹起了琴.她的琴的发声十分特殊.让我们给一个形式化的定义吧.所有的 n 个音符形成一棵由音符 C ( 1 号节点) 构成的有根树,每一个音符有一个音高 Hi .Arietta 有 m 个力度,第 i 个力度能弹出 Di 节点的子树中,音高在 [Li,R…
Description ​ 数轴上有 n 个旗子,第 ii 个可以插在坐标 xi或者 yi,最大化两两旗子之间的最小距离. Input ​ 第一行一个整数 N. ​ 接下来 N 行每行两个整数 xi,yi Output ​ 一个整数表示答案. Sample Input Sample #1 3 1 3 2 5 1 9 Sample #2 5 2 2 2 2 2 2 2 2 2 2 Sample #3 22 93 6440 78 6647 862 11 8306 9689 798 99 801 52…
cf 786 B 链接 CF 思路 n个点,3种建边方式,规模\(O(n^2)\) 线段树优化建图 注意 读入的数据好坑啊,说好的v,u变成了u,v. 两棵树,一棵出,一棵入.线段树的作用只不过是按照那个形状建边而已,并没啥用. 初始父亲儿子连边,两棵树的叶子结点一一连边,边权为0.(实际中可以直接共用叶子结点) 大佬的图很不错,引用一下 然后在把其他关系引用到上面就行了 代码 #include <bits/stdc++.h> #define ll long long using namesp…