poj 3771 http://poj.org/problem?id=3771

wiki Prim http://zh.wikipedia.org/wiki/%E6%99%AE%E6%9E%97%E5%A7%86%E7%AE%97%E6%B3%95

prim 算法水题

之前写过类似的题,一直以为直接暴力,从遍历所有的点为起点,寻找距离起点最短的点然后再在改点上寻找最短距离 这摆明了是划线嘛……根本不是图论啊啊啊!!!!

这样真是萌萌哒……

正确的做法是先枚举所有的点作为起点,然后把距离长的点更新

这是主要的思路代码

  1. int lowcost[MAXN];
  2. int prim(int v0){
  3. for(int i = ;i < n;i++){ //初始化
  4. lowcost[i] = cost[v0][i];
  5. }
  6. int ans = ;
  7. for(int i = ;i < n-;i++){
  8. int mindis = INF;
  9. int minone; //用来标记最小距离
  10. for(j = ;j < n;j++){
  11. if(lowcost[j] && mindis > lowcost[j]){
  12. mindis = lowcost[j];
  13. minone = j;
  14. }
  15. ans += lowcost[minone];
  16. lowcost[minone] = ;
  17. for(int j = ;j < n;j++){ //进行更新
  18. if(cost[minone][j] < lowcost[j]){
  19. lowcost[j] = cost[j][minone];
  20. }
  21. }
  22. }
  23. }
  24. return ans;
  25. }

代码:非原创……!!!!

  1. #include <iostream>
  2. #include <cstdio>
  3. #include <cstring>
  4. #include <cmath>
  5. #include <algorithm>
  6. #include <cstdlib>
  7.  
  8. const int MAXN = + ;
  9. const double ESP = 10e-;
  10. const double Pi = atan(1.0) * ;
  11. const int INF = 0xffffff;
  12. const int MOD = ;
  13.  
  14. using namespace std;
  15. struct Point{
  16. int x;
  17. int y;
  18. };
  19. Point a[MAXN];
  20. bool vis[MAXN];
  21. int n;
  22. double graph[MAXN][MAXN];
  23. double getl(int i,int j){
  24. int x = a[i].x - a[j].x;
  25. int y = a[i].y - a[j].y;
  26. return sqrt(1.0*x*x+1.0*y*y);
  27. }
  28. double prim(int x){
  29. int mark;
  30. bool vis[MAXN];
  31. memset(vis,,sizeof(vis));
  32. vis[x] = ;
  33. double dis[MAXN];
  34. for(int i = ;i < n;i++){
  35. dis[i] = graph[i][];
  36. }
  37. vis[] = ;
  38. if(!x){
  39. for(int i = ;i < n;i++){
  40. dis[i] = graph[i][];
  41. }
  42. vis[] = ;
  43. }
  44. double MIN,SUM = ;
  45. for(int k = ;k < n-;k++){
  46. MIN = INF;
  47. for(int i = ;i < n;i++){
  48. if(!vis[i] && MIN > dis[i]){
  49. MIN = dis[i];
  50. mark = i;
  51. }
  52. }
  53. SUM += MIN;
  54. vis[mark] = ;
  55. for(int i = ;i < n;i++){
  56. if(!vis[i] && dis[i] > graph[mark][i]){
  57. dis[i] = graph[mark][i];
  58. }
  59. }
  60. }
  61. return SUM;
  62. }
  63. int main(){
  64. // freopen("input.txt","r",stdin);
  65. int t;
  66. scanf("%d",&t);
  67. while(t--){
  68. scanf("%d",&n);
  69. for(int i = ;i < n;i++){
  70. scanf("%d%d",&a[i].x,&a[i].y);
  71. }
  72. for(int i = ;i < n;i++){
  73. for(int j = ;j <= i;j++){
  74. graph[i][j] = graph[j][i] = getl(i,j);
  75. }
  76. }
  77. double h,g = INF;
  78. for(int i = ;i < n;i++){
  79. h = prim(i);
  80. g = min(g,h);
  81. }
  82. printf("%.2lf\n",g);
  83. }
  84. return ;
  85. }

Poj 3771 hdu 3405的更多相关文章

  1. POJ 2104&HDU 2665 Kth number(主席树入门+离散化)

    K-th Number Time Limit: 20000MS   Memory Limit: 65536K Total Submissions: 50247   Accepted: 17101 Ca ...

  2. poj 1251 poj 1258 hdu 1863 poj 1287 poj 2421 hdu 1233 最小生成树模板题

    poj 1251  && hdu 1301 Sample Input 9 //n 结点数A 2 B 12 I 25B 3 C 10 H 40 I 8C 2 D 18 G 55D 1 E ...

  3. Eight POJ - 1077 HDU - 1043 八数码

    Eight POJ - 1077 HDU - 1043 八数码问题.用hash(康托展开)判重 bfs(TLE) #include<cstdio> #include<iostream ...

  4. POJ 1177/HDU 1828 picture 线段树+离散化+扫描线 轮廓周长计算

    求n个图矩形放下来,有的重合有些重合一部分有些没重合,求最后总的不规则图型的轮廓长度. 我的做法是对x进行一遍扫描线,再对y做一遍同样的扫描线,相加即可.因为最后的轮廓必定是由不重合的线段长度组成的, ...

  5. POJ 1308&&HDU 1272 并查集判断图

      HDU 1272 I - 小希的迷宫 Time Limit:1000MS     Memory Limit:32768KB     64bit IO Format:%I64d & %I64 ...

  6. POJ 1077 && HDU 1043 Eight A*算法,bfs,康托展开,hash 难度:3

    http://poj.org/problem?id=1077 http://acm.hdu.edu.cn/showproblem.php?pid=1043 X=a[n]*(n-1)!+a[n-1]*( ...

  7. POJ 2342 &&HDU 1520 Anniversary party 树形DP 水题

    一个公司的职员是分级制度的,所有员工刚好是一个树形结构,现在公司要举办一个聚会,邀请部分职员来参加. 要求: 1.为了聚会有趣,若邀请了一个职员,则该职员的直接上级(即父节点)和直接下级(即儿子节点) ...

  8. POJ 1904 HDU 4685

    这两道题差不多,POJ这道我很久以前就做过,但是比赛的时候居然没想起来.. POJ 这道题的题意是,N个王子每个人都有喜欢的公主,当他们选定一个公主结婚时,必须是的剩下的人也能找到他喜欢的公主结婚. ...

  9. 【中国剩余定理】POJ 1006 & HDU 1370 Biorhythms

    题目链接: http://poj.org/problem?id=1006 http://acm.hdu.edu.cn/showproblem.php?pid=1370 题目大意: (X+d)%23=a ...

随机推荐

  1. C++中,如何定义和使用指向成员函数的指针

    /*** 定义指向成员函数的指针变量的形式 : 成员函数返回类型 (类名∷*指针变量名)(参数列表)* 成员函数指针变量值的形式 : &类名∷成员函数名;* 成员函数指针变量使用形式 : (对 ...

  2. 史上最详细的Android Studio系列教程一--下载和安装

    链接地址:http://segmentfault.com/a/1190000002401964#articleHeader4 原文链接:http://stormzhang.com/devtools/2 ...

  3. [Swust OJ 603]--吃饺子大王

      题目链接:http://acm.swust.edu.cn/problem/603/ Time limit(ms): 1000 Memory limit(kb): 65535   同学们还记得我们班 ...

  4. java 对象赋值问题

    import java.io.*; class CCircle{ private static double pi = 3.1415; private double radius; public CC ...

  5. LGPL与闭源程序

    最近一直在学习 Qt.Qt 有两个许可证:LGPL 和商业协议.这两个协议在现在的 Qt 版本中的代码是完全一致的(潜在含义是,Qt 的早期版本,商业版的 Qt 通常包含有一些开源版本所没有的库,比如 ...

  6. jQuery带有定时器的tab栏切换

    现在网上很多类似选项卡的切换,我们成为tab栏切换,比如下图: 新浪的tab栏切换 淘宝的tab栏切换 其中,新浪的tab栏鼠标放上去,可以快速的来回切换,但是如果采取ajax异步传输,不停去加载服务 ...

  7. JavaScript:获取系统当前时间,构造格式化的字符串

    var getNowFormatDate = function() {    var date = new Date();    var seperator1 = "-";    ...

  8. Observer设计模式【利用商品概念解释】

    每个人都想过着富有的生活,这是很正常的. 这里以开店进货为例. 在讲之前解释英语单词: Observer:查看:遵守 Observable:可见的,公开的. 从单词可以知道:商品用来卖,所以公开,继承 ...

  9. DSP连接不上CCS3.3的问题讨论

    环境 操作系统:Win7, 64bit IDE:CCS V3.3 仿真器:SEED XDS510PLUS DSP型号:TMS320C6713GDP(DSP6713) 检查步骤 试着按下复位按键后再点击 ...

  10. [产值分析]生产部KPI考核之产值分析

    接到新任务:设计统计电子和磁电公司生产部产值分析报表. 眼下状况: 1.电子公司:取最新单位价格*入库数量 2.磁电公司:取最低价格*入库数量(实际取价的时候又没有取到最低价) 假设计算出来的结果和財 ...