题目描述 给你一个$n$个点$m$条边的带边权的无向图(无重边,无自环),现在对于每条边,问你这条边的权值最大可以是多大,使得这条边在无向图的所有最小生成树中?(边权都是整数). 输入格式 第一行包含三个整数$n,m,a$表示点数和边数及特殊性质标记(如果$a=0$表示没有特殊性质,如果殊性质).接下来$m$行每行包含三个整数$u,v,w$表示有一条$u$和$v$之间的边,且边权为$w$. 输出格式 输出一行,包含$m$个数,第$i$个数表示第$i$条边对应的答案(如果某条边的权值可以取到$+\…
NOIP 2013 货车运输[树链剖分] 树链剖分 题目描述 Description A 国有 n 座城市,编号从 1 到 n,城市之间有 m 条双向道路.每一条道路对车辆都有重量限制,简称限重.现在有 q 辆货车在运输货物,司机们想知道每辆车在不超过车辆限重的情况下,最多能运多重的货物. 输入描述 Input Description 第一行有两个用一个空格隔开的整数 n,m,表示 A 国有 n 座城市和 m 条道路.接下来 m 行每行 3 个整数 x.y.z,每两个整数之间用一个空格隔开,表示…
传送门 树链剖分菜题. 题意简述:给一个无向图,边有边权,每次询问删一条边(对后面的询问无影响)之后的最小生成树. 思路: 先跑一次kruskalkruskalkruskal并把跑出来的最小生成树给链剖了. 然后考虑如果没有删掉树边答案不变,如果删掉一条能够接上的就只有覆盖了这条边的路径,因此对于每条非树边都用来更新一次树边的信息,O(1)O(1)O(1)处理询问即可. 注意要转边为点 代码: #include<bits/stdc++.h> #define ri register int #d…
题目描述 $Treeland$国有$n$座城市,其中$1$号城市是首都,这些城市被一些单向高铁线路相连,对于城市$i\neq 1$,有一条线路从$i$到$p_i(p_i<i)$.每条线路都是一样长的,通过花费时间也是一样长的.这个国家的每一个城市都有一种特产,整个国家有$m$种特产(不同城市可能又相同的特产),其中城市$i$的特产用$a_i$表示.小$C$和他的几位$A$队爷朋友(总共$c$人,$2\leqslant c\leqslant 5$)正在$Treeland$国游玩,他们准备在一个城市…
题目描述 在星历2012年,星灵英雄Zeratul预测到他所在的Aiur行星在M天后会发生持续性暴雨灾害,尤其是他们的首都.而Zeratul作为星灵族的英雄,当然是要尽自己最大的努力帮助星灵族渡过这场自然灾害.要渡过这场自然灾害,Zeratul自然要安排很多很多事情,其中一件就是将雨水疏导到大海里去.星灵族在重建家园的时候建造了N条河流,这些河流连接了共N+1个城市,当然其中包括了星灵首都.城市的编号为0…N,星灵首都的编号为0.当然水流是有方向的,除了星灵首都以外,其余的城市都有且仅有一条河流…
题面 一句话题意: 给定一张 N 个点, M 条边的无向连通图, 每条边上有边权 w . 求删去任意一个点后的最小生成树的边权之和. 思路 首先肯定要$kruskal$一下 考虑$MST$里面去掉一个点,得到一堆联通块,我们要做的就是用原图中剩下的边把这些联通块穿起来 考虑这个点$u$在$MST$上的位置,可以知道有两种边:一种是从$u$的任意一个儿子的子树连到$u$的子树外面的,一种是在$u$的两个儿子的子树之间连接的 第一种情况: 考虑边$(u,v)$,没有进入$MST$中,那么若它是某个节…
题目 Codeforces827D 分析 倍增神题--(感谢T*C神犇给我讲qwq) 这道题需要考虑最小生成树的性质.首先随便求出一棵最小生成树,把树边和非树边分开处理. 首先,对于非树边\((u,v)\)(表示一条两端点为\(u\)和\(v\)的边,下同).考虑Kruskal算法的过程,它必定成为树边的充要条件是它的权值小于树上\(u\)到\(v\)之间的路径上的某条边\(e\),这样就会选中这条边来连接\(u\)和\(v\)所在的连通块而不是选中\(e\).因此,非树边的答案就是它两端点之间…
Online Judge:Bzoj2164 Label:模拟,树链剖分,线段树 题目描述 浩浩荡荡的cg大军发现了一座矿产资源极其丰富的城市,他们打算在这座城市实施新的采矿战略.这个城市可以看成一棵有n个节点的有根树,我们把每个节点用1到n的整数编号.为了方便起见,对于任何一个非根节点v,它任何一个祖先的编号都严格小于v.树上的每个节点表示一个矿点,每条边表示一条街道.作为cg大军的一个小队长,你拥有m个部下.你有一张二维的动态信息表,用Ti,j表示第i行第j列的数据.当你被允许开采某个区域时,…
题面 题解 首先,点变黑的过程是不可逆的,黑化了就再也洗不白了 其次,对于\(v\)的祖先\(rt\),\(rt\)能用来更新答案当且仅当\(sz_{rt}>sz_{x}\),其中\(sz\)表示子树中黑点的个数,\(x\)表示\(rt\)走到\(v\)的路径上的第二个节点 每一次染黑一个新的点\(u\)之后,我们要让它所有祖先的\(sz+1\),那么我们可以考虑树链剖分+线段树 再回过头来康康树链剖分的过程啊--我们跳着跳着跳到了\(u\),那么对于\([top[u],u]\)之间的点的\(s…
题面 题解 又一道全场切的题目我连题目都没看懂--细节真多-- 先考虑怎么维护仙人掌.在线可以用LCT,或者像我代码里先离线,并按时间求出一棵最小生成树(或者一个森林),然后树链剖分.如果一条边不是生成树上的边,它肯定会和树上\(u,v\)这条路径构成一个环,然后对于每条树边记录一下这条树边被覆盖过没有.如果\(u,v\)路径上有任何一条树边被覆盖过,那么就说明路径上有一条边已经在一个简单环中,这条非树边就不能加.否则就加上这条边并让这条路径上所有树边的覆盖次数加一 然后考虑期望连通块个数.首先…