BZOJ版切记录

1016: [JSOI2008]最小生成树计数

orz,感觉对最小生成树的理解又加进了一步。ps:不得不说对于经典算法的探究是永无止境的,只能通过交流和增长见识来学习和体会,自己研究确实困难。

让我们来深入分析一下kruskal算法。算法过程不多说,直接证明:假设算法考虑到第k条边,这时发现边的两端已经在同一个连通块里面了(称为“冲突”),为了使这条边加入这个连通块之后仍然保持树的性质,我们定要从成的环上删去一条边,而之后连通性并未发生改变,但由于删去的边权不大于当前边权,所以答案不会更优,证毕。

对于这道题,我们要看到通过kruskal算法求最小生成树的过程的分析得出的一个性质:如果相同权的边C有K条,那么在考虑下一种边权时,不同的加入法被加入连通状态的边C数量相同,且点的连通状态相同。即:一个图的最小生成树相同边权的边的数量一定相等,且加入这些边之后形成的连通状态也相同。证明:将相同的边权分成一个加边阶段,对于当前阶段的边C设其有K条。假设在考虑到K中的第T条时发生了冲突,有两种情况:若形成的环中有之前加入过的C边,那么可以将其替换从而连通状态不会改变;若没有,当前K值边不能加入且之后的K值边也无法加入。上述两种情况都不会增加加入边的数量和改变连通状态,得证。

所以就愉快的kruskal暴力并查集维护连通性+搜索,每个阶段可能的加边方案数累乘起来就行了。注意特判无解情况(因为上述做法会在无解时输出1)。代码网上多的是23333。matrix-tree定理貌似用不了啊??求神犇(特指ydc)讲解2333.

时间: 2024-10-28 10:35:54

BZOJ版切记录的相关文章

BZOJ 刷题记录 PART 1

作者 : Dolphin 原文地址:http://blog.csdn.net/qingdujun/article/details/27109035 一.实体完整性定义 [例1]将Student表中的Sno属性定义为码. CREATE TABLE Student ( Sno CHAR(10) PRIMARY KEY, /*在列定义主码*/ Sname CHAR(20) NOT NULL, Sage SMALLINT ); 或者: CREATE TABLE Student ( Sno CHAR(10

BZOJ 刷题记录 PART 4

[BZOJ1143]CTSC的题目...先用floyed传递闭包,然后直接上匈牙利算法. [BZOJ1452]从未写过的二维树状数组.好像很简单.. struct two_bit { int f[305][305]; inline void add(int x,int z,int A) { for (;x<=n;x+=L(x)) for (int y=z;y<=m;y+=L(y)) f[x][y]+=A; } inline int ask(int x,int z) { int ans=0; f

BZOJ 刷题记录 PART 5

拖了好久才写的. [BZOJ2821]接触分块大法.这道题略有点新颖.首先我们先分块,然后统计每块中每个数出现的个数. 下面是联立各个方块,预处理出第I个方块到第J个方块出现正偶数次数的个数. for (i=1;i<=s;i++) { for (j=i;j<=s;j++) { sum[i][j]=sum[i][j-1]; for (k=a[j].l;k<=a[j].r;k++) { temp[data[k]]++; if (!(temp[data[k]]&1)) sum[i][j

升级Windows 10 正式版过程记录与经验

升级Windows 10 正式版过程记录与经验 [多图预警]共50张,约4.6MB 系统概要: 预装Windows 8.1中文版 C盘Users 文件夹已经挪动到D盘,并在原处建立了符号链接.(我怀疑这是系统升级失败的原因) 本次升级目标: 保持正版Windows身份 尽量保留程序和设置 使用工具: Windows PE UltraISO等 注: 文中图片序号不连续.小数序号一般为照片.整数一般为截图. 本文为原创,URL:http://www.cnblogs.com/go2bed/p/4695

【BZOJ做题记录】07.07~?

在NOI一周前重开一个坑 最后更新时间:7.07 11:26 7.06 下午做的几道CQOI题: BZOJ1257: [CQOI2007]余数之和sum:把k mod i写成k-k/i*i然后分段求后面的部分就好了 BZOJ1258: [CQOI2007]三角形tri:在草稿纸上按照位置和边找一下规律就好了 BZOJ1260: [CQOI2007]涂色paint:简单的区间DP BZOJ1303: [CQOI2009]中位数图:小于中位数的改为-1大于的改为1,算一算前缀和然后哈希一下乘一乘就好

BZOJ 刷题记录 PART 2

[前言]最近感觉状态不错.做题几乎不看题解了.(一群大牛(FZ&WCY)在旁边喷:你刷水题有意思!)但是至少这也是一种进步吧.特别是权限题中有很多思维题. [BZOJ1055]就是一个简单的区间DP.重要代码: for (l=2;l<=L;l++) for (i=1;i<=L-l+1;i++) { j=i+l-1; for (k=0;k<4;k++) for (cut=i;cut<j;cut++) for (p=0;p<4;p++) if (f[i][cut][p])

BZOJ 刷题记录 PART 3

[前言]还是强调要少看题解. [BZOJ1090]简单的区间DP.值得注意的是:在压缩的时候,如果是10个A压缩,那么化成(10)A后有5个字符而不是4个!(我在这里被坑了好长时间!)以下是核心代码: for (len=2;len<=L;len++) for (i=1;i<=L-len+1;i++) { j=i+len-1; for (k=i;k<j;k++) f[i][j]=min(f[i][j],f[i][k]+f[k+1][j]); for (l=1;l<=len/2;l++

BZOJ 口胡记录

最近实在是懒的不想打代码...好像口胡也算一种训练,那就口胡把. BZOJ 2243 染色(树链剖分) 首先树链剖分,然后记录下每个区间的左右端点颜色和当前区间的颜色段.再对每个节点维护一个tag标记.剩下的就是很normal的线段树区间合并和标记下传了. BZOJ 2245 工作安排(费用流) 很normal的拆边费用流.建立虚拟源点s和汇点t.s向产品连边,产品向可以生产它的工人连边,工人向t连边.这里的分段函数是个非递减的分段函数,由于最小费用流的特殊性.这里的分段函数可以用流和费用分割开

HTML日记——试着解剖HTML5版切水果小游戏(1)

2018.1.11 实践是最好的老师,在学习阶段通过分析一部成型的作品来了解一门语言的运作方式不失为理解这门语言的一种方法. 这里我们选择分析HTML5版的切水果游戏来进一步了解HTML5和JavaScript. 先看html文件的代码: <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <meta name="description" content=&q