小结:生成树
算法:
最小生成树的算法有:Prim(O(nlgn)),Kruskal(O(nlg**n)),Prim在某些场合很好用,某些场合必须用。。。Kruskal的话最快。。
技巧及应用:
当看到要求连通一个图的最小代价,显然最小生成树,例如
还有次小生成树,就是在非最小生成树中找一条边来替代生成树中的一条边(保证连通的情况下),然后更新最小值(当然我是嘴巴选手,还没写过QAQ)
如果要求按建树,只知道两两之间的距离,那么肯定这棵树是两两之间距离的最小生成树。我们可以将他们先看成一个完全图,因为最小生成树的边一定大于不是生成树的边,因此那些大于生成树边的边是可能满足距离相等的,反之,如果构造的树比其中一个边大,那么显然这个图是错误的。例题:
生成树计数:
- 【BZOJ】1016: [JSOI2008]最小生成树计数(kruskal+特殊的技巧)(依次加入边然后边权相同的边计算方案数,然后累计)
- 【BZOJ】1005: [HNOI2008]明明的烦恼(prufer编码+特殊的技巧)(好神的题!以数列的方式与树结构一一对应,从而计数)
博客地址:www.cnblogs.com/iwtwiioi 本文为博主原创文章,未经博主允许不得转载。一经发现,必将追究法律责任。