摘要: 判断最下生成树是否唯一的思路:1、对图中的每一条边,扫描其他边,如果存在相同权值的边,则对该边做标记。2、然后用Kruskal算法或Prim算法求MST。3、求得MST后,如果该MST中未包含做了标记的边,即可判断MST唯一;如果包含做了标记的边,则依次去掉这些边再求MST,如果求得的MST权值和原来的MST的权值一样,即可判断MST不唯一。针对poj 1679这题,采用Kruskal算法求MST,并判断MST是否唯一:代码如下:View Code 1 #include<iostream> 2 #include<cstdio> 3 #include<algorit 阅读全文
posted @ 2013-02-03 22:02 ihge2k 阅读(1912) 评论(0) 推荐(0) 编辑
摘要: http://acm.hdu.edu.cn/showproblem.php?pid=3367求pseudoforest伪森林,要求每个连通分量最多可以有一个环。求能构成的最大值我是用kruskal的方法按照求最大生成树那样求的,只不过要加一个判断,就是判断两颗子树是够成环,如果各成环,就不能合并,如果只有其中一个成环或者都不成环,那么就可以合并,并对其进行标记。。。View Code 1 #include 2 #include 3 #include 4 #include 5 const int N=10010; 6 using namespace std; 7 8 int n,m; 9 i.. 阅读全文
posted @ 2013-02-03 21:29 ihge2k 阅读(481) 评论(0) 推荐(0) 编辑
摘要: http://acm.hdu.edu.cn/showproblem.php?pid=2489题目大意是有n个顶点的无向完全图,要你选m个点,使得m个点构成的图的m-1条边的权重之和比上m个点的值的和最小,即Sum(edge weight)/Sum(point weight)最小;由于题目的数据很小,因此我就直接暴力了。。。就是从n个点中先选m个点,对应一个最小值,然后对这m个点进行搜索就可以了。。。如果一开始就从第一个点就开始dfs,那么就可以保证最后的结果就是题目要求的。。。View Code 1 #include<iostream> 2 const int N=20; 3 co 阅读全文
posted @ 2013-02-03 20:27 ihge2k 阅读(293) 评论(0) 推荐(0) 编辑
摘要: http://www.cppblog.com/RyanWang/archive/2010/01/25/106427.html简单来说,就是有向的最小生成树:1、每个点找其最小的入边In[v] ? 如果有除跟节点以外的点找不到入边,则无解 : 否则答案累加In[v]2、看看有没有环 ? 无环则已经找到解,返回答案 : 将环缩点3、重新构图,每条边[u->v]的权值减去In[v],然后重复第一步模板题:hdu 2121:View Code 1 #include 2 #include 3 const int N=1010; 4 const int inf=10000000; 5 usin... 阅读全文
posted @ 2013-02-03 17:31 ihge2k 阅读(556) 评论(0) 推荐(0) 编辑