luogu P3250 [HNOI2016]网络】的更多相关文章

传送门 考虑只有一个询问,怎么使用暴力枚举最快的得到答案.因为要求最大的,所以可以把链按权值从大往小排序,然后往后扫,找到一个没有交的就是答案,直接退出 一堆询问,可以考虑整体二分,先二分一个值\(mid\),然后从前往后扫,如果是加入/删除操作,并且权值\(> mid\)就把这个操作贡献记上;如果是询问,然后如果经过这个点的链个数\(\ne\)当前存在的链个数,说明答案\(>mid\),否则\(\le mid\) 然后剩下的套一个整体二分板子就好了.答案的话如果取值范围的\(l=r\),就可…
LINK:网络 一棵树 每次添加一条路径 或者删除之前的一条路径 或询问除了不经过某个点之外剩下的最大值. 一个显然的思路 对于一条路径的权值我们直接把权值塞上去 标记永久化一下即可. 考虑如何求答案 一个比较暴力的思想 我们取所某个节点的所有标记 和全局标记从小到大一一比对即可. 这样复杂度还是Q^2的. 可以发现对于一条链的权值 如果不放到链上 而是放到这条链之外的所有的点上 那么我们求答案其实就变成了单点查询. 可以在树剖的时候把要覆盖的链求出来 排个序就得到了补集.(不过这种做法nlog…
这题太神仙了必须写博客... 显然可以想到二分答案.二分一个答案mid,如果所有长度\(\geq mid\)的路径都过x,那么答案一定\(<mid\),否则答案\(\geq mid\). 那么就可以写出代码了,树状数组套动态开点线段树即可.时间复杂度\(O(n(log_2n)^3)\) 然后因为出题人卡空间就炸了...如果256M就能过了.. #include<bits/stdc++.h> #define il inline #define vd void typedef long lo…
题目大意:给定一棵树.有三种操作: $0\;u\;v\;t:$在$u$到$v$的链上进行重要度为$t$的数据传输. $1\;x:$结束第$x$个数据传输. $2\;x:$询问不经过点$x$的数据传输中重要度最大的是多少(无解输出$-1$). 题解:可以发现一条路径对所有不在这条路径上的点有贡献,所以可以把这些区间给排除(树链剖分中的每一条链存下来),把其他位置加上一个数,可以给每个点维护一个大根堆. 考虑删除一个数,可以再开一个大根堆,表示删除的数,若两个堆顶元素相同,就弹出. 卡点:无 C++…
传送门 据说正解是树剖套堆???然而代码看着稍微有那么一点点长…… 考虑一下整体二分,设当前二分到的答案为$mid$,如果所有大于$mid$的边都经过当前点$x$,那么此时$x$的答案必定小于等于$mid$ 然后考虑怎么判断是否所有边都经过某一个点.我们可以用树状数组+树上差分来维护,把每一条边的两个端点的值加1,他们LCA的值减1,LCA父亲的值减1,那么如果这条边经过某一个点,那么这个点子树的和必定为1 于是我们可以把所有大于mid的边都处理出来,然后判断子树的和是否等于路径条数就行了.这个…
题意 有一棵\(n\)(\(n\leq 10^5\))个点的树,\(m\)(\(m\leq 2\times 10^5\))个操作.操作有三种:1.给出\(u,v,k\),表示加入一条从\(u\)到\(v\)权值为\(k\)的路径:2.给出\(k\),表示删除\(k\)时刻加入的路径:3.给出\(x\),表示询问不经过点\(x\)的路径的权值最大值. 题解 3操作看上去很奇怪,先假装它是"询问经过\(x\)的路径的权值最大值". 这样1操作就可以看成区间修改为最大值,3操作可以看成单点求…
解法1: 本题有插入路径和删除路径,在每个节点维护插入堆和删除堆,查询时两者top一样则一直弹出.如果每个节点维护的是经过他的路径,显然有些不好处理,正难则反,每个点维护不经过他的路径,那么x节点出了故障时,我们就查询x,查询到的就是x出故障后不受影响的路径. (洛谷上有一个点一直过不了,似乎是之后加强过的数据). 1 #include<bits/stdc++.h> 2 using namespace std; 3 const int N=200010; 4 int tot,sum,head[…
4538: [Hnoi2016]网络 题意:一棵树,支持添加一条u到v权值为k的路径,删除之前的一条路径,询问不经过点x的路径的最大权值 考虑二分 整体二分最大权值,如果\(k \in [mid+1,r]\)中的路径有不经过x的,那么这个询问的答案在\([mid+1,r]\)中 链修改,点查询\(\rightarrow\)点修改,子树查询,方法是\(u,v +1\ ;\ lca,fa[lca] -1\) 用树状数组就可以完成 这里的整体二分不需要对每个询问保存当前贡献,因为每次只需要考虑一段的贡…
[LG3250][HNOI2016]网络 题面 洛谷 题解 30pts 对于\(m\leq 2000\),直接判断一下这个个点是否断掉一个交互,没断掉的里面取\(max\)即可,复杂度\(O(m^2\log n)\). 另20pts 对于无删除操作的,用线段树维护, 我们将一条路径的补集全部打上那条路径重要度的标记,这样我们断一条边时直接单点查询即可. 据说这样子再改改可以变成一种树剖加堆的做法,但是好像现在在bzoj被卡了 100pts 想到二分答案,若所有权值\(\geq mid\)的路径都…
4538: [Hnoi2016]网络 链接 分析: 整体二分. 对于一次操作,可以二分一个答案mid,判断权值大于mid的路径是否全部经过这个点.如果是 ,那么这次询问的答案在[l,mid-1]之间,否则在[mid,r]之间. 判断是否所有的路径经过一个点:等价于数经过这个点的路径条数,对于一条路径(u->v),可以在u,v处+1,在lca处-1,在fa[lca]处-1,然后询问一个点的子树和即可. 多次询问,整体二分即可. 代码: #include<cstdio> #include&l…
[HNOI2016]网络 LG传送门 表示乱搞比正解难想. 整体二分很好想吧. 但是为了好写快乐,我们选择三个\(\log\)的乱搞. 先树剖,线段树套堆维护区间最大值.对于一次修改,如果是插入,就把树上除了这条链的地方加上这个重要度,如果是删除则反之.注意线段树可以标记永久化,这里用的堆是一种(可能)叫懒惰堆的东西,直接看代码都能理解. //written by newbiechd #include <cstdio> #include <cctype> #include <…
[Luogu 2604] ZJOI2010 网络扩容 第一问直接最大流. 第二问,添加一遍带费用的边,边权 INF,超级源点连源点一条容量为 \(k\) 的边来限流,跑费用流. 大约是第一次用 namespace 封装,感觉还好. #include <cstdio> #include <cstring> #include <queue> using std::min; using std::queue; const int MAXN=1010,MAXM=10010,IN…
[BZOJ4538][Hnoi2016]网络 Description 一个简单的网络系统可以被描述成一棵无根树.每个节点为一个服务器.连接服务器与服务器的数据线则看做一条树边.两个服务器进行数据的交互时,数据会经过连接这两个服务器的路径上的所有服务器(包括这两个服务器自身).由于这条路径是唯一的,当路径上的某个服务器出现故障,无法正常运行时,数据便无法交互.此外,每个数据交互请求都有一个重要度,越重要的请求显然需要得到越高的优先处理权.现在,你作为一个网络系统的管理员,要监控整个系统的运行状态.…
Luogu-3250 [HNOI2016]网络 题面 Luogu-3250 题解 CDQ分治...这个应该算是整体二分吧 二分重要度,按照时间从小到大加入大于重要度的边 对于一个询问,如果经过这个点的边数不等于加入的边数,那就说明有比重要度大而且不经过这个点的边,然后分成两部分继续做 看Candy?大佬的博客学会了一种加边方法:记录dfn序,对于一条边\(u\),\(v\).让端点的\(cnt\)++,\(lca\)和\(fa[lca]\)的--,找经过一个点边数只需要查询他的子树大小就好啦 代…
HNOI2016 Day1 T2 网络 Description 一个简单的网络系统可以被描述成一棵无根树.每个节点为一个服务器.连接服务器与服务器的数据线则看做一条树边.两个服务器进行数据的交互时,数据会经过连接这两个服务器的路径上的所有服务器(包括这两个服务器自身).由于这条路径是唯一的,当路径上的某个服务器出现故障,无法正常运行时,数据便无法交互.此外,每个数据交互请求都有一个重要度,越重要的请求显然需要得到越高的优先处理权.现在,你作为一个网络系统的管理员,要监控整个系统的运行状态.系统的…
题目连接: (luogu) https://www.luogu.org/problemnew/show/P2604 (bzoj) https://www.lydsy.com/JudgeOnline/problem.php?id=1834 题解: 第一问所有的费用全按\(0\)建,跑完了之后很自然想到利用残余网络. 把\(n\)和一个新点\(T\)连边,然后原来的残量网络保留,在此基础上对于原来的每条边流量均按\(+\inf\)建,费用为原始费用再跑一遍即可. 时间复杂度\(O(MaxFlowMi…
Luogu P3376 最大流是网络流模型的一个基础问题. 网络流模型就是一种特殊的有向图. 概念: 源点:提供流的节点(入度为0),类比成为一个无限放水的水厂 汇点:接受流的节点(出度为0),类比成为一个无限收水的小区 弧:类比为水管 弧的容量:类比为水管的容量:用函数\(c(x,y)\)表示弧\((x,y)\)的容量 弧的流量:类比为当前在水管中水的量:用函数\(f(x,y)\)表示弧\((x,y)\)的流量 弧的残量:即容量-流量 容量网络:对于一个网络流模型,每一条弧都给出了容量,则构成…
某两个点间的请求只对不在这条路径上的询问有影响.那么容易想到每次修改除该路径上的所有点的答案.对每个点建个两个堆,其中一个用来删除,线段树维护即可.由于一条路径在树剖后的dfs序中是log个区间,所以其补集也是log个区间. #include<iostream> #include<cstdio> #include<cmath> #include<cstdlib> #include<cstring> #include<algorithm>…
原题传送门:P2604 [ZJOI2010]网络扩容 这题可以说是板题 给你一个图,先让你求最大流 再告诉你,每条边可以花费一些代价,使得流量加一 问至少花费多少代价才能使最大流达到k 解法十分简单 先跑一个dinic求最大流(我懒着写ISAP或前弧优化) 再重新建图 跑一个mcmf求最小费用最大流 答案就出来了 细节见代码 #pragma GCC optimize("O3") #include <bits/stdc++.h> #define maxn 10005 #def…
题目链接:https://www.luogu.org/problemnew/show/P1262 注意: 1.缩点时计算出入度是在缩完点的图上用color计算.不要在原来的点上计算. 2.枚举出入度时是在缩完点的图上计算.枚举范围到num. #include <stack> #include <cstdio> #include <cstring> #include <iostream> #include <algorithm> using nam…
题目背景 浙江省的几所OI强校的神犇发明了一种人工智能,可以AC任何题目,所以他们决定建立一个网络来共享这个软件.但是由于他们脑力劳动过多导致全身无力身体被♂掏♂空,他们来找你帮助他们. 题目描述 共有n所学校(n<=10000)已知他们实现设计好的网络共m条线路,为了保证高速,网络是单向的.现在请你告诉他们至少选几所学校作为共享软件的母机母鸡,能使每所学校都可以用上.再告诉他们至少要添加几条线路能使任意一所学校作为母机母鸡都可以使别的学校使用上软件. 输入格式 第一行一个整数n. 接下来n行每…
题面 中文题目,不解释: BZOJ传送门 Luogu传送门 分析 这题建图是显然的,拆点后iii和i′i'i′连容量为吞吐量的边,根据题目要求,111和nnn的吞吐量看作∞\infty∞. 然后用distdistdist表示到111的最小距离,对于满足dist[v]=dist[u]+w[u,v]dist[v]=dist[u]+w[u,v]dist[v]=dist[u]+w[u,v]的边,u′u'u′和vvv连容量为∞\infty∞的边.最后建一个超级源点和超级汇点,分别与111和n′n'n′连容…
LINK:网络收费 还是自己没脑子. 早上思考的时候 发现树形dp不可做 然后放弃治疗了. 没有合理的转换问题的模型是我整个人最大的败笔. 暴力也值得一提 爆搜之后可以写成FFT的形式的计算贡献的方法 连图都不用建出来. 不是传统的树形dp 因为子树的状态影响之后的决策 并且从下至上的话需要状压所有点的状态 从上之下的话代价难以统计. 观察图中的这张表格 容易发现有规律的事情 当 na<nb时 有A的一定付出代价 两个A的话就两倍 一个A的话就一倍 B的话不要代价. 容易转换成上述模型 于是 这…
求出这棵树的dfs序,对于一条链$u-v$,假设$st[u]\leq st[v]$,那么一条链不经过点$x$当且仅当它满足下面任意一个条件: 1.$st[v]<st[x]$ 2.$st[u]>en[x]$ 3.$st[x]<st[lca(u,v)]\leq en[x]$ 4.$st[u]<st[x],st[v]>en[x]$ 前3种情况可以通过线段树做到$O(\log n)$修改,$O(\log n)$查询. 第4种情况可以通过kd-tree做到$O(\log n)$修改,$…
题目 朴素算法 在线. 树链剖分套一个堆. 时间复杂度\(O(n (\log n)^3)\). 分治 朴素算法中,套一个堆是为了支持删除操作. 采用以下分治可以避免删除操作: 每次对时间\([l,r]\)分治,先取一个中点\(m=(l+r) / 2\),对于一个请求(不妨设其作用范围为\([p,q]\))而言, 如果它跨越了\(m\),就是说\(p<m\)且\(q > m\),那么我们在该层计算它对询问的贡献,并且它不进入下一层. 所以可以去掉一个堆,时间复杂度\(O(n (\log n)^2…
Description 一个简单的网络系统可以被描述成一棵无根树.每个节点为一个服务器.连接服务器与服务器的数据线则看做一条树边.两个服务器进行数据的交互时,数据会经过连接这两个服务器的路径上的所有服务器(包括这两个服务器自身).由于这条路径是唯一的,当路径上的某个服务器出现故障,无法正常运行时,数据便无法交互.此外,每个数据交互请求都有一个重要度,越重要的请求显然需要得到越高的优先处理权.现在,你作为一个网络系统的管理员,要监控整个系统的运行状态.系统的运行也是很简单的,在每一个时刻,只有可能…
题目描述 由于外国间谍的大量渗入,国家安全正处于高度的危机之中.如果A间谍手中掌握着关于B间谍的犯罪证据,则称A可以揭发B.有些间谍收受贿赂,只要给他们一定数量的美元,他们就愿意交出手中掌握的全部情报.所以,如果我们能够收买一些间谍的话,我们就可能控制间谍网中的每一分子.因为一旦我们逮捕了一个间谍,他手中掌握的情报都将归我们所有,这样就有可能逮捕新的间谍,掌握新的情报. 我们的反间谍机关提供了一份资料,包括所有已知的受贿的间谍,以及他们愿意收受的具体数额.同时我们还知道哪些间谍手中具体掌握了哪些…
传送门 \(HNOI2019\)前最后一题了qwq 这题要分情况,如果\(p=2\)或\(5\),那么只要区间内最后一个数字是\(p\)的倍数就好了,这个可以莫队,也有更优秀的做法.莫队做法可以看代码懒 否则,考虑一个数怎么表示,记\(s_i\)为前\(i\)为构成的数,可以知道区间\([i,j]\)的数应该是\(s_r-s_{l-1}*10^{r-l+1}\),现在要求这个数模\(p\)为0,那么也就是\[s_r-s_{l-1}*10^{r-l+1}\equiv0\ (\mathrm{mod}…
其实这道题根本没必要写,但为了测试vector+堆优化的Prim试一发. 再次觉得Prim和Dijkstra很像,堆优化版本也差不多. 和Dijkstra一样,Prim也是在之前的dis点中选取一个最短的,但不同是Prim是最短边长,而Dijkstra是到达该点的最短路长度. 既然是取最小的,堆自然就派上用场了. CODE #include<cstdio> #include<queue> #include<vector> #include<cstring>…
题目链接:http://www.lydsy.com/JudgeOnline/problem.php?id=4538 维护一个数据结构支持对于一颗树的操作,需要支持: 1.对于树上的一条路径上的每个点上放一个值. 2.撤销某次操作的路劲放. 3.查询除了经过这个点的路径的最大值. 往一个路径上丢值相当于往不经过条路径的所有点上丢值. 用一个树链剖分即可维护,对于操作区间取反. 直接查询单点最大值即可. 为了维护单点最大值,线段树中的每一个点对应两个堆,用于维护插入誉删除. 防止爆空间,所以标记永久…