一名苦逼的OIer,想成为ACMer

Iowa_Battleship

09 2018 档案

BZOJ1001或洛谷4001 [BJOI2006]狼抓兔子
摘要:"BZOJ原题链接" "洛谷原题链接" 显然就是求最小割。 而对于一个平面图有结论,最大流=最小割=对偶图最短路。 所以这题可用最大流或是转换为对偶图求最短路,这里我是用的对偶图。 虽然理论上按上界算,这题$Dinic$应该是跑不过去的,不过因为网络流复杂度玄学,$Dinic$莫名跑得挺快的。 在转 阅读全文

posted @ 2018-09-30 12:34 Iowa_Battleship 阅读(165) 评论(0) 推荐(0) 编辑

BZOJ4033或洛谷3177 [HAOI2015]树上染色
摘要:"BZOJ原题链接" "洛谷原题链接" 很明显的树形$DP$。 因为记录每个点的贡献很难,所以我们可以统计每条边的贡献。 对于每一条边,设边一侧的黑点有$B_x$个,白点有$W_x$,另一侧黑点有$B_y$,白点有$W_y$,边权为$w$,那么这条边的贡献就是$(W_x\times W_y + B_ 阅读全文

posted @ 2018-09-30 10:33 Iowa_Battleship 阅读(149) 评论(0) 推荐(0) 编辑

BZOJ1833或洛谷2602 [ZJOI2010]数字计数
摘要:"BZOJ原题链接" "洛谷原题链接" 又是套记搜模板的时候。。 对$0\sim 9$单独统计。 定义$f[pos][sum]$,即枚举到第$pos$位,前面枚举的所有位上是当前要统计的数的个数之和为$sum$。 cpp include include using namespace std; ty 阅读全文

posted @ 2018-09-29 19:48 Iowa_Battleship 阅读(126) 评论(0) 推荐(0) 编辑

洛谷3959 宝藏
摘要:"原题链接" 这题我是用了个玄学的$dfs$剪枝跑过,如果要看正解状压$DP$,可以移步机房大佬的博客( "传送门" ) 关于剪枝,具体的直接在代码里说吧。 cpp include include include using namespace std; const int N = 20; int 阅读全文

posted @ 2018-09-29 13:27 Iowa_Battleship 阅读(177) 评论(0) 推荐(0) 编辑

洛谷1600 天天爱跑步
摘要:"原题链接" 要解决这题有一个很重要的思想,就是将跑步的路径拆开来,分成向上走的$S\to LCA(S,T)$,及向下走的$LCA(S,T)\to T$($S$是路径起点,$T$是路径终点)。 然后对于两种路径单独统计贡献。 先只考虑向上走的路径$S\to LCA(S,T)$。 对于一个观测点$i$ 阅读全文

posted @ 2018-09-28 19:59 Iowa_Battleship 阅读(158) 评论(0) 推荐(0) 编辑

Codeforces55D Beautiful numbers
摘要:"原题链接" 虽然依旧是套模板,但是因为我太弱了,不会建状态,所以去看了题解。。 这里就直接引用我看的题解吧,写的不错的。 "题解" cpp //我的代码 include include using namespace std; const int mod = 2520; const int N = 阅读全文

posted @ 2018-09-27 14:31 Iowa_Battleship 阅读(143) 评论(0) 推荐(0) 编辑

HDOJ4734 F(x)
摘要:"原题链接" 数位$DP$,~~继续套记搜模板~~ 定义$f[pos][now]$,$pos$是枚举到的位数,$now$是$A$的权值减去当前枚举的数的权值,即剩余权值大小。 然后就是记搜模板的事。 cpp include include using namespace std; const int 阅读全文

posted @ 2018-09-26 19:57 Iowa_Battleship 阅读(176) 评论(0) 推荐(0) 编辑

HDOJ2089 不要62
摘要:"原题链接" 数位$DP$入门题。 记录前一个枚举到的数位,在每次枚举的时候避开$4$,如果前一个数位为$6$,还要跳过$2$。 然后套上记搜模板就好。 阅读全文

posted @ 2018-09-26 19:11 Iowa_Battleship 阅读(108) 评论(0) 推荐(0) 编辑

洛谷1993 小K的农场
摘要:"原题链接" 裸的差分约束。 1. $X_a X_b\geqslant C$ 2. $X_a X_b\leqslant C\Rightarrow X_b X_a\geqslant C$ 3. $X_a X_b\geqslant 0,X_b X_a\geqslant 0$ 并建立一个超级源点$0$,对 阅读全文

posted @ 2018-09-26 13:12 Iowa_Battleship 阅读(113) 评论(0) 推荐(0) 编辑

BZOJ4326或洛谷2680 运输计划
摘要:"BZOJ原题链接" "洛谷原题链接" 用$LCA$初始化出所有运输计划的原始时间,因为答案有单调性,所以二分答案,然后考虑检验答案。 很容易想到将所有超出当前二分的答案的运输计划所经过的路径标记,在这些运输计划都经过的边中的权值最大的这条边上建立虫洞,如果能使得所有运输计划中需要时间最多的那个计划 阅读全文

posted @ 2018-09-25 21:04 Iowa_Battleship 阅读(97) 评论(0) 推荐(0) 编辑

洛谷3119 [USACO15JAN]草鉴定Grass Cownoisseur
摘要:"原题链接" 显然一个强连通分量里所有草场都可以走到,所以先用$tarjan$找强连通并缩点。 对于缩点后的$DAG$,先复制一张新图出来,然后对于原图中的每条边的终点向新图中该边对应的那条边的起点连一条边,表示逆向走一次,且之后不会再逆向了。 最后在该图上跑$SPFA$求单源最长路即可。 cpp 阅读全文

posted @ 2018-09-25 13:23 Iowa_Battleship 阅读(115) 评论(0) 推荐(0) 编辑

BZOJ1051或洛谷2341 [HAOI2006]受欢迎的牛
摘要:"BZOJ原题链接" "洛谷原题链接" 显然在一个强连通分量里的奶牛都可以相互喜欢,所以可以用$tarjan$求强连通并缩点。 要求明星奶牛必须被所有人喜欢,显然缩点后的图必须满足只有一个点没有出度,因为若有两个点没有出度,那么其中一个点所包含的奶牛显然不能喜欢另一个点的奶牛。 而这个唯一的没有出度 阅读全文

posted @ 2018-09-24 21:22 Iowa_Battleship 阅读(114) 评论(0) 推荐(0) 编辑

POJ2349 Arctic Network
摘要:"原题链接" 先随便找一棵最小生成树,然后贪心的从大到小选择边,使其没有贡献。 显然固定生成树最长边的一个端点安装卫星频道后,从大到小选择边的一个端点作为卫星频道即可将该边的贡献去除。 所以最后的答案就是最小生成树上第$m$长的边。 cpp include include include inclu 阅读全文

posted @ 2018-09-24 20:32 Iowa_Battleship 阅读(81) 评论(0) 推荐(0) 编辑

洛谷4054 [JSOI2009]计数问题
摘要:"原题链接" 二维树状数组模板题。 对每一种颜色开一棵二维树状数组统计即可。 cpp include using namespace std; const int N = 310; const int M = 110; int C[M][N][N], a[N][N], n, m; inline in 阅读全文

posted @ 2018-09-24 14:47 Iowa_Battleship 阅读(118) 评论(0) 推荐(0) 编辑

洛谷3387 【模板】缩点
摘要:"原题链接" 做了挺多强连通分量缩点题,结果模板还晾着。。 $tarjan$找强连通缩点,然后拓扑排序$DP$就好。 cpp include using namespace std; const int N = 1e4 + 10; const int M = 1e5 + 10; struct eg 阅读全文

posted @ 2018-09-21 13:24 Iowa_Battleship 阅读(107) 评论(0) 推荐(0) 编辑

BZOJ2730或洛谷3225 [HNOI2012]矿场搭建
摘要:"BZOJ原题链接" "洛谷原题链接" 显然在一个点双连通分量里,无论是哪一个挖煤点倒塌,其余挖煤点就可以互相到达,而对于一个点双连通分量来说,与外界的联系全看割点,所以我们先用$tarjan$求出点双连通分量,再对每个点双进行讨论。 1. 若该点双不含割点,那么这个点双是与外面隔绝的,至少要设置两 阅读全文

posted @ 2018-09-21 12:38 Iowa_Battleship 阅读(176) 评论(3) 推荐(0) 编辑

BZOJ1093或洛谷2272 [ZJOI2007]最大半连通子图
摘要:"BZOJ原题链接" "洛谷原题链接" 和 Going from u to v or from v to u?( "题解" )这道题类似,只不过是求最大子图的大小和个数而已。 一样用$tarjan$求强连通分量,并进行缩点,然后对于缩点后的$DAG$进行拓扑排序$DP$。 定义$size[i]$表示 阅读全文

posted @ 2018-09-20 21:16 Iowa_Battleship 阅读(151) 评论(0) 推荐(0) 编辑

POJ2762 Going from u to v or from v to u?
摘要:"原题链接" 显然在一个强连通分量里,任意两个点都可以到达,所以我们先用$tarjan$求强连通分量,并进行缩点。 对于缩点后的$DAG$,必须满足是一条链,即在对该$DAG$进行拓扑排序的过程中,在任何时候都 有且只有一个点是入度为$0$ 。 因为若有两个点或以上的点同时出现入度为$0$,那么这几 阅读全文

posted @ 2018-09-19 20:45 Iowa_Battleship 阅读(121) 评论(0) 推荐(0) 编辑

POJ3422或洛谷2045 Kaka's Matrix Travels
摘要:"POJ原题链接" "洛谷原题链接" 很裸的费用流。 将每个点$x$拆成$x_1,x_2$,并从$x_1$向$x_2$连一条容量为$1$,费用为该点的权值的边,以及一条容量为$+\infty$,费用为$0$的边。 设$x$下方的点为$y$,右边的点为$z$(如果存在),则从$x_2$向$y_1,z_ 阅读全文

posted @ 2018-09-18 20:08 Iowa_Battleship 阅读(108) 评论(0) 推荐(0) 编辑

LaTeX数学公式大全
摘要:原写于我的洛谷博客( "传送门" ),现搬到这个博客上。 建议去洛谷博客上看,因为两边的编辑器在有些功能上不能通用,所以之后若有删改或新增内容只在洛谷博客上弄,这边就懒得改了。 原本是针对洛谷的编辑器,不过懒得对博客园的进行修改了,就直接搬过来了,想来也够用了(对于某些在该编辑器上无法使用的直接删去 阅读全文

posted @ 2018-09-18 18:49 Iowa_Battleship 阅读(3802) 评论(3) 推荐(3) 编辑

POJ1966 Cable TV Network
摘要:"原题链接" 割去点使得无向图不连通,和最小割相似。 我们可以将点转化成边,这样就能跑最小割了。 枚举每两个不能直接到达的点$S,T$,使得删去一些点(除去这两个点)使得这两个点不连通(若两点能直接到达显然无解),然后我们按下面的方法建立新图: 1. 将每个点$x$,拆成两个点$x_1,x_2$,对 阅读全文

posted @ 2018-09-18 14:01 Iowa_Battleship 阅读(134) 评论(0) 推荐(0) 编辑

CF Round #510 (Div. 2)
摘要:前言:没想到那么快就打了第二场,题目难度比 "CF Round 509 (Div. 2)" 这场要难些,不过我依旧菜,这场更是被$D$题卡了,最后$C$题都来不及敲了。。最后才$A$了$3$题,幸好$Rating$没掉。 "A. Benches" Description 有$n$个位置,给出每个位置 阅读全文

posted @ 2018-09-17 21:11 Iowa_Battleship 阅读(228) 评论(0) 推荐(0) 编辑

CF Round #509 (Div. 2)
摘要:前言:第一次打$CF$,因为经验不足以及英语水平很烂,即便在机房大佬的带领下也是花了好久才读懂题目。。$A$题直到$11$分钟才$A$,题目一共才做了$4$题,太菜了。。 "A. Heist" Description 有$n$个正整数,设最小的数为$minn$,最大的数为$maxn$,求$minn\ 阅读全文

posted @ 2018-09-16 21:25 Iowa_Battleship 阅读(219) 评论(3) 推荐(0) 编辑

CH#17C 舞动的夜晚
摘要:"原题链接" 即求二分图的不可行边数量,因为不保证是完备匹配,所以需要通过网络流求出任意一组最大匹配,并建立新图判断。 建新图:对于跑完网络流的图上已经匹配的边,建立反边;对于没有匹配的边,建立正边(图只改变边的方向,别的结构不变)。 有结论: 1. 必须边的判定条件为:$(x,y)$的流量为$1$ 阅读全文

posted @ 2018-09-16 18:08 Iowa_Battleship 阅读(599) 评论(0) 推荐(0) 编辑

CODE[VS]2494 Vani和Cl2捉迷藏
摘要:"原题链接" 这里有一个结论:最多能选取的藏身点个数等于最小路径可重复点覆盖的路径总数。 所以我们可以先传递闭包,然后求最小路径点覆盖即可。 cpp include include using namespace std; const int N = 210; int mtc[N], n; bool 阅读全文

posted @ 2018-09-15 08:28 Iowa_Battleship 阅读(186) 评论(0) 推荐(0) 编辑

CH6901 骑士放置
摘要:"原题链接" 和棋盘覆盖( "题解" )差不多.。 同样对格子染色,显然日字的对角格子是不同色,直接在对应节点连边,然后就是二分图最大独立集问题。 cpp include include using namespace std; const int N = 1e4 + 10; const int M 阅读全文

posted @ 2018-09-15 07:35 Iowa_Battleship 阅读(205) 评论(0) 推荐(0) 编辑

POJ2226 Muddy Fields
摘要:"原题链接" 因为每一块泥地要么被横着的木板盖住,要么被竖着的木板盖住,所以可以转换为二分图最小点覆盖问题。 我们可以先标记出所有连续的行泥地和连续的列泥地。 比如对于原题中的样例,标记后是这样的: 行连续泥地:$\begin{pmatrix}1 & 0 & 2 & 0 \\ 0 & 3 & 3 & 阅读全文

posted @ 2018-09-14 16:32 Iowa_Battleship 阅读(85) 评论(0) 推荐(0) 编辑

POJ1325 Machine Schedule
摘要:"原题链接" 对于每个任务,要么选$A$机器的模式,要么选$B$机器的模式,由此想到二分图最小点覆盖。 所以我们可以将任务作为边,将对应的$A$机器模式和$B$机器模式连起来,然后直接求最小覆盖即可。 注意,本题模式从$0$开始编号,而且机器初始是在$0$模式,所以在连边时要忽略含$0$模式的任务。 阅读全文

posted @ 2018-09-14 12:50 Iowa_Battleship 阅读(78) 评论(0) 推荐(0) 编辑

POJ3565 Ants
摘要:"原题链接" 要求所有线段不相交,实际上满足每条线段的长度和最小。 所以我们可以让蚁窝和苹果树连边,边权为两点的距离,然后就是求二分图带权最小匹配了,可以上$KM$算法或是费用流。 这里我使用的是费用流。 阅读全文

posted @ 2018-09-14 12:21 Iowa_Battleship 阅读(82) 评论(0) 推荐(0) 编辑

JoyOI1935 导弹防御塔
摘要:"原题链接" 首先可以二分答案,然后考虑检验答案。 我们可以对炮塔进行拆点,即能发射$x$颗导弹就拆成$n\times x$个点,作为一个集合,另一个集合则是$m$个侵入者,然后对于能在剩余时间攻击到侵入者的炮弹和该侵入者连边,然后跑匈牙利或网络流求二分图最大匹配即可(本质是多重匹配,使用拆点法)。 阅读全文

posted @ 2018-09-13 19:44 Iowa_Battleship 阅读(173) 评论(0) 推荐(0) 编辑

CH6802 車的放置
摘要:"原题链接" 和棋盘覆盖( "题解" )差不多。 将行和列看成$n+m$个节点,且分属两个集合,如果某个节点没有被禁止,则行坐标对应节点向列坐标对应节点连边,然后就是求二分图最大匹配了。 cpp include include using namespace std; const int N = 4 阅读全文

posted @ 2018-09-13 14:26 Iowa_Battleship 阅读(164) 评论(0) 推荐(0) 编辑

JoyOI1035 棋盘覆盖
摘要:"原题链接" 对棋盘染色,坐标和为奇数的染黑,偶数为白。这时会发现对于相同颜色的格子,是无法放置骨牌的,这样我们就将所有格子分成两类,然后根据能否放置骨牌连边,最后就是求二分图最大匹配了。 这里我是用的匈牙利算法。 cpp include include using namespace std; c 阅读全文

posted @ 2018-09-13 13:48 Iowa_Battleship 阅读(200) 评论(0) 推荐(0) 编辑

POJ3683 Priest John's Busiest Day
摘要:"原题链接" $2 SAT$模板题。 对于有时间重叠的婚礼转换成$2 SAT$的命题形式连边,用$tarjan$找强连通分量并判断,确定方案即可。 然而一道模板题,我因为数组开小了调了一晚上。。。 阅读全文

posted @ 2018-09-12 21:13 Iowa_Battleship 阅读(111) 评论(0) 推荐(0) 编辑

POJ3678 Katu Puzzle
摘要:"原题链接" $2 SAT$模板题。 将$AND,OR,XOR$转换成$2 SAT$的命题形式连边,用$tarjan$求强连通分量并检验即可。 cpp include using namespace std; const int N = 2010; const int M = 4e6 + 10; i 阅读全文

posted @ 2018-09-12 13:28 Iowa_Battleship 阅读(131) 评论(0) 推荐(0) 编辑

洛谷4782 【模板】2-SAT 问题
摘要:"原题链接" $2 SAT$模板 阅读全文

posted @ 2018-09-12 12:59 Iowa_Battleship 阅读(115) 评论(0) 推荐(0) 编辑

BZOJ2330或洛谷3275 [SCOI2011]糖果
摘要:"BZOJ原题链接" "洛谷原题链接" 很明显的差分约束,但数据范围较大,朴素$SPFA$判正环求解会$T$(理论上如此,但我看到有挺多人用朴素的还跑得挺快。。),所以需要优化。 我们所建立的有向图中所有边的权值只有$0$或$1$,而且若图中有环,那么环上所有边的权值必须为$0$,否则无解。 所以我 阅读全文

posted @ 2018-09-12 11:20 Iowa_Battleship 阅读(165) 评论(0) 推荐(0) 编辑

POJ1236或洛谷2746或洛谷2812 Network of Schools
摘要:"POJ原题链接" "洛谷2746原题链接" "洛谷2812(加强版)原题链接" 显然在强连通分量里的所有学校都能通过网络得到软件,所以我们可以用$tarjan$求出强连通分量并缩点,统计缩点后每个点的入度和出度。 对于第一问,因为所有零入度的点无法通过网络得到软件,所以答案就是零入度的点的数量。 阅读全文

posted @ 2018-09-11 20:07 Iowa_Battleship 阅读(99) 评论(0) 推荐(0) 编辑

POJ2230 Watchcow
摘要:"原题链接" 类欧拉回路,要求每条边被正反各经过一次,且从$1$出发并回到$1$。 只需每次搜索该点的边时,将该点的边对应的邻接表头及时修改为下一条即可,因为邻接表恰好储存了正反方向的边,所以及时更新表头就能保证每条边被正反各经过一次。 cpp include using namespace std 阅读全文

posted @ 2018-09-11 14:33 Iowa_Battleship 阅读(89) 评论(0) 推荐(0) 编辑

POJ2942 Knights of the Round Table
摘要:"原题链接" 建补图,这样题目要求的即是求有多少个点没有被任何奇环包含。 这里有两个结论: 1. 若两个骑士属于两个不同的$v DCC$,那么这两个骑士肯定不能一起出席会议。 2. 若在某个$v DCC$中,存在一个奇环,那么该点双连通分量中所有点都被至少一个奇环包含。 所以,我们只需要在用$tar 阅读全文

posted @ 2018-09-11 14:03 Iowa_Battleship 阅读(123) 评论(0) 推荐(0) 编辑

POJ3694 Network
摘要:"原题链接" 先用$tarjan$找出所有$e DCC$,并进行缩点,这时桥的数量即是缩点后树的边数。 然后对于每一个添边$(x,y)$的操作,如果$x,y$属于同一个$e DCC$,那么桥的数量不变。 如果分别属于两个$e DCC$,那么从$x$所在的$e DCC$(设为$e[x]$)到$y$所在 阅读全文

posted @ 2018-09-11 11:31 Iowa_Battleship 阅读(115) 评论(0) 推荐(0) 编辑

BZOJ1123或洛谷3469 [POI2008]BLO-Blockade
摘要:"BZOJ原题链接" "洛谷原题链接" 若第$i$个点不是割点,那么只有这个点单独形成一个连通块,其它点依旧连通,则答案为$2\times (n 1)$。 若第$i$个点是割点,那么去掉这个点相关的边就会形成$3$种构成的连通块: 1. 由点$i$本身构成。 2. 由点$i$的子树(搜索树中)形成若 阅读全文

posted @ 2018-09-10 19:12 Iowa_Battleship 阅读(133) 评论(0) 推荐(0) 编辑

洛谷3388 【模板】割点(割顶)
摘要:一道找割点模板 "原题链接" $tarjan$找割点模板,不解释。 cpp include using namespace std; const int N = 1e5 + 10; int fi[N], di[N '9'; c = getchar()) p |= c == ' '; for (; c 阅读全文

posted @ 2018-09-10 12:56 Iowa_Battleship 阅读(100) 评论(0) 推荐(0) 编辑

POJ3621或洛谷2868 [USACO07DEC]观光奶牛Sightseeing Cows
摘要:一道$0/1$分数规划+负环 "POJ原题链接" "洛谷原题链接" 显然是$0/1$分数规划问题。 二分答案,设二分值为$mid$。 然后对二分进行判断,我们建立新图,没有点权,设当前有向边为$z=(x,y)$,$time$为原边权,$fun$为原点权,则将该边权换成$mid\times time[ 阅读全文

posted @ 2018-09-09 21:10 Iowa_Battleship 阅读(125) 评论(0) 推荐(0) 编辑

洛谷3385 【模板】负环
摘要:一道负环模板 "原题链接" 负环模板,不解释。 阅读全文

posted @ 2018-09-09 19:51 Iowa_Battleship 阅读(121) 评论(0) 推荐(0) 编辑

洛谷1984 [SDOI2008]烧水问题
摘要:一道找规律 "原题链接" 显然要将烧得的温度最大化利用,即每次都去热传递。 设水沸腾为$x$。 第一杯直接烧水,需提高$x$。 第二杯先与第一杯进行热传递,这样只需提高$\dfrac{x}{2}$,是上一杯的$\dfrac{1}{2}$倍。此时两杯温度为$\dfrac{x}{2},x$。 第三杯先与 阅读全文

posted @ 2018-09-09 19:23 Iowa_Battleship 阅读(150) 评论(0) 推荐(0) 编辑

JoyOI1940 创世纪
摘要:一道基环树+树形$DP$ "原题链接" 显然输入的是内向基环树森林,且我们可以单独考虑每一棵基环树。 既然是基环树,自然先$dfs$找环,然后随便找环上的一点$r$,将其与$A[r]$的边断开,建反边,这时就会形成一棵以$r$为根的树,且每个点的子节点都是能限制它的元素。 于是我们可以在这棵树上跑树 阅读全文

posted @ 2018-09-07 20:55 Iowa_Battleship 阅读(186) 评论(0) 推荐(0) 编辑

BZOJ1791或洛谷4381 [IOI2008]Island
摘要:一道基环树的直径 "BZOJ原题链接" "洛谷原题链接" 又是一道实现贼麻烦的题。。 显然公园其实是基环树森林,求的最长距离其实就是求每一棵基环树的直径的总和。 对于每棵基环树,其直径要么经过环,要么是某个环上点的子树的直径。所以我们可以先找出它的环,然后对环上的每个点进行$dfs$(不能经过环上的 阅读全文

posted @ 2018-09-06 20:43 Iowa_Battleship 阅读(146) 评论(0) 推荐(0) 编辑

洛谷1084 疫情控制
摘要:一道贪心+LCA倍增法的预处理+二分答案 "原题链接" 又是一道细节贼多的题。。敲了我一个晚上。。 显然可以二分答案,然后就是判定的问题。 贪心地发现军队越在靠近首都的点建立检查站,则贡献越大。所以我们让所有军队都往首都靠近,这时所有军队要么无法到达首都的子节点,要么已经到达首都的子节点,而对于前者 阅读全文

posted @ 2018-09-05 19:20 Iowa_Battleship 阅读(319) 评论(0) 推荐(0) 编辑

BZOJ1977或洛谷4180 [BJWC2010]次小生成树
摘要:一道LCA+生成树 "BZOJ原题链接" "洛谷原题链接" 细节挺多,我调了半天。。累炸。。 回到正题,我们先求出随便一棵最小生成树(设边权和为$s$),然后扫描剩下所有边,设扫到的边的两端点为$x,y$,长度为$z$,树上$x,y$间边权最大的边和严格次大的边分别为$dis_1,dis_2$。 如 阅读全文

posted @ 2018-09-03 14:53 Iowa_Battleship 阅读(265) 评论(0) 推荐(0) 编辑

CH#56C 异象石
摘要:一道LCA "原题链接" 先跑一边$dfs$,求出每个节点的时间戳,如果我们将有异象石的节点按时间戳从小到大的顺序排列,累加相邻两节点之间的距离(首尾相邻),会发现总和就是答案的两倍。 于是我们只需要维护这个按时间戳排序的有序数列和答案即可。 当插入一个新的节点$u$时,设插入位置的原有两节点为$x 阅读全文

posted @ 2018-09-02 19:56 Iowa_Battleship 阅读(205) 评论(0) 推荐(0) 编辑

POJ3417 Network
摘要:一道LCA+树上差分 "原题链接" 显然每一条新增边都会导致环。 如果试着举些例子的话,很容易发现割掉非环上的边,则割掉其他任意一条新增边都可达成目标;若割掉的原有边是一个环上的边,那么只有割掉导致这个环出现的新增边才能使得图变为不连通的两部分。若割掉的边是两个或两个以上的环上的边,那么无论第二次怎 阅读全文

posted @ 2018-09-02 19:28 Iowa_Battleship 阅读(124) 评论(0) 推荐(0) 编辑

HDOJ2586 How far away ?
摘要:一道LCA模板 "原题链接" $LCA$模板题,不解释。 倍增版 cpp include include include using namespace std; const int N = 4e4 + 10; int fi[N], da[N '9'; c = getchar()) p |= c = 阅读全文

posted @ 2018-09-02 19:00 Iowa_Battleship 阅读(118) 评论(0) 推荐(0) 编辑

BZOJ1999或洛谷1099&BZOJ2282或洛谷2491 树网的核&[SDOI2011]消防
摘要:一道树的直径 "树网的核 BZOJ原题链接" "树网的核 洛谷原题链接" "消防 BZOJ原题链接" "消防 洛谷原题链接" ~~一份代码四倍经验,爽~~ 显然要先随便找一条直径,然后直接枚举核的两个端点,对每一次枚举的核遍历核上的每个点,用$dfs$求出核外节点到核的最大值即可,时间复杂度为$O( 阅读全文

posted @ 2018-09-02 17:01 Iowa_Battleship 阅读(155) 评论(0) 推荐(0) 编辑

BZOJ1912或洛谷3629 [APIO2010]巡逻
摘要:一道树的直径 "BZOJ原题链接" "洛谷原题链接" 显然在原图上路线的总长为$2(n 1)$。 添加第一条边时,显然会形成一个环,而这条环上的所有边全部只需要走一遍。所以为了使添加的边的贡献最大化,我们找出树的直径,将其两端点连上边即可。 设直径长$L$,于是路线总长就变为$2(n 1) L+1= 阅读全文

posted @ 2018-09-02 16:32 Iowa_Battleship 阅读(121) 评论(0) 推荐(0) 编辑

CH6202 黑暗城堡
摘要:一道最短路+生成树 "原题链接" 实际上就是生成树的中每个点到节点$1$的距离等于原图中这个点到节点$1$的最短距离,求这样的生成树的棵数。 先用$SPFA$或$Dijkstra$求出所有点到节点$1$的最短路径$dis[x]$,然后将所有节点按$dis$从小到大排序。 枚举$x$,表示已经有$x 阅读全文

posted @ 2018-09-02 16:11 Iowa_Battleship 阅读(236) 评论(0) 推荐(0) 编辑

POJ2728 Desert King
摘要:一道生成树+$0/1$分数规划 "原题链接" 设每条边的距离为$dis[x]$,两点高度差为$h[x]$,该图的生成树为$T$,则题目实际求的就是$\dfrac{\sum\limits_{x\in T}h[x]}{\sum\limits_{x\in T}dis[x]}$的最小值。 这就是经典的$0/ 阅读全文

posted @ 2018-09-02 11:30 Iowa_Battleship 阅读(82) 评论(0) 推荐(0) 编辑

JoyOI1391 走廊泼水节
摘要:一道另类生成树 "原题链接" 将输入的树的$n 1$条边按从小到大排序,然后$Kruskal$在生成该树的过程中计算新增边的总长。 当在连第$i$条边,设该边的两端点为$x,y$,长度为$z$,分别属于$S_x$和$S_y$两个并查集中。 而为了将树变成完全图,显然要将$S_x,S_y$两个并查集中 阅读全文

posted @ 2018-09-01 21:28 Iowa_Battleship 阅读(88) 评论(0) 推荐(0) 编辑

导航