雕刻时光

just do it……nothing impossible
  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

随笔分类 -  最小生成树

摘要:咋一看还以为是,求森林里树的最小和实际增加0点就是求最小生成树了……View Code #include<stdio.h>int map[309][309];int dis[309];int p[309];bool use[309];int n;void krus(){ int i,min,rj,j; for(i=0;i<=n;i++) { use[i]=0; dis[i]=map[0][i]; } use[0]=1; int add=0; for(i=0;i<n;i++) { min=99999999; for(j=0;j<=n;j++) { if(use[j] 阅读全文

posted @ 2011-03-24 20:49 huhuuu 阅读(623) 评论(0) 推荐(0) 编辑

摘要:sqrt(1000000*1000000)数据发生超int处理办法,sqrt(1.0*1000000*1000000)即可prim不超时View Code #include<cmath>#include<stdio.h>#include<iostream>#include<algorithm>using namespace std;#define MAX 0x3fffffffint n,m;struct data{ int x,y;}a[1009];double map[1009][1009];bool use[1009];double dis[ 阅读全文

posted @ 2011-03-17 21:02 huhuuu 阅读(718) 评论(0) 推荐(0) 编辑

摘要:略有难度的最小生成树问题:先排序算出某一长度的边有几条,放到tong[],再用krus求某一长度的边需要几条,xu[],再用枚举的方法举例出某一长度的符合条件为几条(再枚举下一种边时。把边覆盖上),分别为f1,f2,f3……再把f1,f2,f3相乘……(当然乘的过程不要忘了mod31011)ps:比较郁闷的是数组开小了,一直wa,稍微开大点TLE,再开大,AC……我就奇怪为什么别人的程序数组开小没问题,囧……其实还有一种矩阵的解法,速度更快……自己看看论文 阅读全文

posted @ 2011-02-21 21:04 huhuuu 阅读(867) 评论(0) 推荐(0) 编辑

摘要:一开始还mlt,纳闷,看了discuss才知道数据不是有规律的,他们之间可能有多个空格……所以用cin输入View Code 阅读全文

posted @ 2011-02-20 10:11 huhuuu 阅读(292) 评论(0) 推荐(0) 编辑

摘要:我的思路是多次执行krusk,通过枚举比较产生最小minps:一般用g++提交要加上#include<stdio.h>(貌似废话了^ ^)View Code 阅读全文

posted @ 2011-02-20 09:29 huhuuu 阅读(390) 评论(0) 推荐(1) 编辑

摘要:从点的角度考虑,因为要使男女的点都要经过,所以男的点要是加上女生的人数的人数,遍历只要生成最大生成树,树的路径和就是可以节约的钱了……kruskal+并查集,效率较高ps:要是不加#include<iostream>的话,用c++提交会有错,g++就没事,所以用c++提交不要忘了加上#include<iostream>View Code 阅读全文

posted @ 2011-02-19 10:01 huhuuu 阅读(588) 评论(0) 推荐(0) 编辑

摘要:水题……View Code 阅读全文

posted @ 2011-02-18 15:46 huhuuu 阅读(289) 评论(0) 推荐(0) 编辑

摘要:水题……View Code 阅读全文

posted @ 2011-02-18 15:28 huhuuu 阅读(320) 评论(0) 推荐(0) 编辑

摘要:求最小树,map[][]初始都为MAX求最大树,map[][]初始都为0,prim函数再改下就ok了判断全树是通过判断顶点是否都遍历了,即use[]1到n是否都为1View Code 阅读全文

posted @ 2011-02-18 14:29 huhuuu 阅读(284) 评论(0) 推荐(0) 编辑

摘要://printf("%.2lf\n",sqrt((double)a[s]));//以后用sqrt自己小心点,而且要用c++提交//郁闷到了没加double就一直错,不说了,而且g++提交也一直错,c++提交才对下次看到题目有说用sqrt的时候要小心了,因为精度而产生的问题是比较郁闷的ps:用vs2008它会会提示sqrt重载问题……以后有关精度问题时先在vs上运行试试……View Code 阅读全文

posted @ 2011-02-17 21:20 huhuuu 阅读(275) 评论(0) 推荐(0) 编辑

摘要:一次prim就秒杀……注意是无向图View Code 阅读全文

posted @ 2011-02-17 08:50 huhuuu 阅读(268) 评论(0) 推荐(0) 编辑

摘要:正反两次遍历最小生成树,把结果顶点的连通性结果分别放在hash[][],hash2[][]里,在比较若相同,则树唯一,反之不唯一View Code 阅读全文

posted @ 2011-02-16 22:33 huhuuu 阅读(552) 评论(0) 推荐(0) 编辑

摘要:用枚举算法做,思想还是比较简单的:(比较朴素的思想,没优化过)1、一共找n-1条边形成最小生成树{2、枚举i寻找第i条边是遍历过的点3、枚举j寻找第j条没被遍历过的点在枚举符合条件【i,j】的同时找出最短的边}//一共枚举了n-1,然后最小生成树就诞生了……时间复杂度是(顶点^3)PRIM思想:FOR()一点为起点,与所有点连线,距离保存在dis[]里,起点标记for(i->(n-1)) 一共连n-1条边{  FOR()//找dis[]最短的边  保存距离,标记  FOR()//更新没被标记的最短边,注意与最短路不同,dis[i]是保存到i的最短边,而最短路中 阅读全文

posted @ 2011-02-16 21:19 huhuuu 阅读(1655) 评论(0) 推荐(0) 编辑