[带权二分图][KM算法][模板] SGU252 Railway Communication

为什么模板题都a的这么艰难

调了这么久发现其实原来的就是对的只是样例可以有不同解,蠢的程度也是没谁了。。。

题意就是求DAG上的最小路径覆盖数,而且使得所有路径权值之和最小,而且要输出路径。将每一个点拆成两个点,分别在二分图左右两侧,读入的所有的路都是从左往右。   求最小路径覆盖也就是求最大匹配,而在这一条件下要求总长度最小,将边附上权值求最小权最大匹配即可。由于KM算法 继续阅读“[带权二分图][KM算法][模板] SGU252 Railway Communication”

[CF][构造][思维] CF1017C The Phone Number

这题官方题解给了个Dilworth’s theorem,并不懂是什么东西。。。

写出来一些后可以找规律(多写),然后可以发现就是可以把原序列分成几块连续的上升序列,只不过块之间的相对顺序反了过来。。这个也不知道怎么证明,但是感觉是找不到比这个更好的。。这样的话就相当于LIS+LDS的长度是块的大小加上块的数量。实现的时候注意最后一个块可能不完整。

继续阅读“[CF][构造][思维] CF1017C The Phone Number”

[图论][生成树扩展][LCA] bzoj1977 次小生成树模板题

这个题确实是领悟到了不少东西,lca倍增的思想和用途,思维方法,构建生成树的逻辑,严格次小的要求。发现图论很重要的一个东西就是存储用的数据结构,我不怎么会写前向星于是就很难受了。。就这个题而言是要先求MST,再对MST做LCA,那么就会有两个图,一个是原始的用来求MST,另一个用来求LCA,第二个就是MST这个树本身。所以建了俩图,第二个图是在Kruskal的过程中建立的,与此同时还要记录下来不在MST上的边,以便之后的枚举操作。另外一个需要注意的点就是要求是严格次小,所以的就需要保存一个第二大这么一个数,这个又有很多情况,不同树上区间合并的时候根据两个区间最大的数的关系来处理。

错误的话,1 求LCA的时候应该swap 使得较深的为y,这里写错了                          2 数组容量开错,这个今天错了几次,主要是没看清m和n,而且总是蜜汁把m写成n。。                                                                                                                          3 数组下标写错(为什么经常做这种蠢事????                                                    4 跟LL比较大小却初始化为1<<29,,显然不够,改成1<<60就过了,也是最后一个错误
继续阅读“[图论][生成树扩展][LCA] bzoj1977 次小生成树模板题”

[带权并查集] HDU5441 Travel

扯淡的就是我们队训练赛两个队友一个过了一个一人题一个过了一个5人题,然后我这边有两个通过率90%+的卡住没过,呵呵了真的是,怀疑人生。

这个后来补题也是wa,计数并查集合并公式推错(这么简单卧槽我小学数学没学好),然后最愚蠢的是排序的时候把m写成了n,wa到哭。

其实当时第一眼看就大概想到是用计数的并查集做,但是没想到自己能写这么挫,而且当时主要是被那个二叉树卡住(怀疑人生+2),那个真的只要简单粗暴就好我却想多了,唉

继续阅读“[带权并查集] HDU5441 Travel”

[强连通分量][DAG][DP] UVa11324

算是学到了缩点构造新图的方法吧emm有点笨

有环的图一般都有点难倒腾,所以这种都是遇见了先求scc,变成DAG以后再想办法求解。

分析题意后可以发现,对于DAG,求出来的其实是一条路径,因为如果有分叉的话分叉的不同子树之间就没有办法互通了。令每个缩点的权值为含点的个数,这样就转化成了DAG上的最长路问题了。

错误:scc每次都会出现漏初始化错误。。。还有就是缩点之后的节点标记与原来的节点意义不同,要注意。

  继续阅读“[强连通分量][DAG][DP] UVa11324”

[割点][强连通分量] POJ1523 SPF

这题略坑。。。输入的可以是不连续的点,我一开始都从1开始dfs,WA了n发发现数据里可能没1这个点。。。GG

求割点的话本身倒是很裸,但是还要求出生成的子集个数,也是试了各种奇怪的方法。。。。后来发现把low[v]>=pre[u]的子节点v的数量记下来就可以了,至于证明。。。直觉证明法吧
继续阅读“[割点][强连通分量] POJ1523 SPF”

[CF][思维][预处理][枚举] CF1016C Vasya And The Mushrooms

这场CF也是崩了。。AB太慢而且wa了n发,C知道正确做法然后wa了3发剩20min放弃了。然后今天手算了五分钟ac emmmmm

这个要做到每个格子都只走一次,就必须先蛇形然后转圈,只不过中间从哪一点开始转圈决定了最后的答案大小。样例给的就是两种极端情况,一种是从一开始就开始转圈,另一种是一直蛇形直到最后。

预处理的话左边的从左往右推,右边的从右往左推,主要是右边的计算有点绕(其实也不是很绕主要是当时心态崩了emmm 继续阅读“[CF][思维][预处理][枚举] CF1016C Vasya And The Mushrooms”