题目

改动见下,请自行画图理解

具体细节也请看下面的代码:

这个花了300多ms

  1. #define _CRT_SECURE_NO_WARNINGS
  2.  
  3. #include<string.h>
  4. #include<stdio.h>
  5. #include<math.h>
  6. #include<algorithm>
  7. using namespace std;
  8.  
  9. const int MAXN=;
  10.  
  11. #define typec int
  12. const typec INF=;//防止后面溢出,这个不能太大
  13. bool vis[MAXN];
  14. typec cost[MAXN][MAXN];
  15. typec lowcost[MAXN];
  16. void Dijkstra(int n,int beg) //连通图的最小边——最短路变种2,恰好和poj 2253 相反
  17. {
  18. for(int i=;i<=n;i++)
  19. {
  20. lowcost[i]=cost[beg][i];vis[i]=false;//因为初始化都在这里了,所以后面的对起点的初始化可以省去
  21. }
  22. for(int i=;i<=n;i++)
  23. {
  24. typec temp=-;//此处改动
  25. int k=-;
  26. for(int j=;j<=n;j++)
  27. {
  28. if(!vis[j]&&lowcost[j]>temp)//此处改动
  29. {
  30. temp=lowcost[j];
  31. k=j;
  32. }
  33. }
  34. vis[k]=true;
  35. for(int l=;l<=n;l++)
  36. {
  37. if(!vis[l])
  38. {
  39. lowcost[l]=max(min(lowcost[k],cost[k][l]),lowcost[l]);//原来改动在这列,具体可画图求证感知
  40. }
  41. }
  42. }
  43. }
  44.  
  45. int main()
  46. {
  47. int n,i,id=,t,m,a,b,c;
  48. scanf("%d",&t);
  49. for(;id<=t;)
  50. {
  51. scanf("%d%d",&n,&m);//路口数和街道数不要反了!
  52. memset(cost,,sizeof(cost));//初始化请注意,这里要都变为0,相当于无法运货,即载重量为0
  53. for(i=;i<=m;i++)
  54. {
  55. scanf("%d%d%d",&a,&b,&c);
  56. cost[a][b]=cost[b][a]=c;//这里请注意
  57. }
  58. Dijkstra(n,);
  59. printf("Scenario #%d:\n%d\n\n",id++,lowcost[n]);//居然在输出这里跪了
  60. }
  61. return ;
  62. }

在初始化时改一笔我觉得更容易理解,在此处也可以AC,但是时间多了,代码如下,花了400多ms

  1. #define _CRT_SECURE_NO_WARNINGS
  2.  
  3. #include<string.h>
  4. #include<stdio.h>
  5. #include<math.h>
  6. #include<algorithm>
  7. using namespace std;
  8.  
  9. const int MAXN=;
  10.  
  11. #define typec int
  12. const typec INF=0x3f3f3f3f;//防止后面溢出,这个不能太大
  13. bool vis[MAXN];
  14. typec cost[MAXN][MAXN];
  15. typec lowcost[MAXN];
  16. void Dijkstra(int n,int beg) //连通图的最小边——最短路变种2,恰好和poj 2253 相反
  17. {
  18. for(int i=;i<=n;i++)
  19. {
  20. lowcost[i]=cost[beg][i];vis[i]=false;//因为初始化都在这里了,所以后面的对起点的初始化可以省去
  21. }
  22. for(int i=;i<=n;i++)
  23. {
  24. typec temp=-;//此处改动
  25. int k=-;
  26. for(int j=;j<=n;j++)
  27. {
  28. if(!vis[j]&&lowcost[j]>temp)//此处改动
  29. {
  30. temp=lowcost[j];
  31. k=j;
  32. }
  33. }
  34. vis[k]=true;
  35. for(int l=;l<=n;l++)
  36. {
  37. if(!vis[l])
  38. {
  39. lowcost[l]=max(min(lowcost[k],cost[k][l]),lowcost[l]);//原来改动在这列,具体可画图求证感知
  40. }
  41. }
  42. }
  43. }
  44.  
  45. int main()
  46. {
  47. int n,i,id=,t,m,a,b,c;
  48. scanf("%d",&t);
  49. for(;id<=t;)
  50. {
  51. scanf("%d%d",&n,&m);//路口数和街道数不要反了!
  52. memset(cost,,sizeof(cost));//初始化请注意,这里要都变为0,相当于无法运货,即载重量为0
  53.  
  54. for(i=;i<=n;i++)
  55. cost[i][i]=INF; //感觉加了这个更容易理解,因为是同一地方,载重量可以无限大
  56.  
  57. for(i=;i<=m;i++)
  58. {
  59. scanf("%d%d%d",&a,&b,&c);
  60. cost[a][b]=cost[b][a]=c;//这里请注意
  61. }
  62. Dijkstra(n,);
  63. printf("Scenario #%d:\n%d\n\n",id++,lowcost[n]);//居然在输出这里跪了
  64. }
  65. return ;
  66. }

poj 1797 Heavy Transportation(最短路变种2,连通图的最小边)的更多相关文章

  1. POJ 1797 Heavy Transportation (最短路)

    Heavy Transportation Time Limit: 3000MS   Memory Limit: 30000K Total Submissions: 22440   Accepted:  ...

  2. POJ 1797 Heavy Transportation 最短路变形(dijkstra算法)

    题目:click here 题意: 有n个城市,m条道路,在每条道路上有一个承载量,现在要求从1到n城市最大承载量,而最大承载量就是从城市1到城市n所有通路上的最大承载量.分析: 其实这个求最大边可以 ...

  3. POJ 1797 Heavy Transportation(Dijkstra变形——最长路径最小权值)

    题目链接: http://poj.org/problem?id=1797 Background Hugo Heavy is happy. After the breakdown of the Carg ...

  4. poj 1797 Heavy Transportation(最大生成树)

    poj 1797 Heavy Transportation Description Background Hugo Heavy is happy. After the breakdown of the ...

  5. POJ 1797 Heavy Transportation / SCU 1819 Heavy Transportation (图论,最短路径)

    POJ 1797 Heavy Transportation / SCU 1819 Heavy Transportation (图论,最短路径) Description Background Hugo ...

  6. POJ.1797 Heavy Transportation (Dijkstra变形)

    POJ.1797 Heavy Transportation (Dijkstra变形) 题意分析 给出n个点,m条边的城市网络,其中 x y d 代表由x到y(或由y到x)的公路所能承受的最大重量为d, ...

  7. POJ 1797 Heavy Transportation

    题目链接:http://poj.org/problem?id=1797 Heavy Transportation Time Limit: 3000MS   Memory Limit: 30000K T ...

  8. POJ 1797 Heavy Transportation SPFA变形

    原题链接:http://poj.org/problem?id=1797 Heavy Transportation Time Limit: 3000MS   Memory Limit: 30000K T ...

  9. POJ 1797 ——Heavy Transportation——————【最短路、Dijkstra、最短边最大化】

    Heavy Transportation Time Limit:3000MS     Memory Limit:30000KB     64bit IO Format:%I64d & %I64 ...

随机推荐

  1. linux exec函数族

    1.简介 在Linux中,并不存在exec()函数,exec指的是一组函数,一共有6个,分别是: #include <unistd.h>   extern char **environ; ...

  2. 去掉影响效率的where 1=1

    最近看了篇文章,觉得挺有道理.实际项目中,我们进行sql条件过滤,我们不能确定是不是有条件.也不能确定条件的个数.大多数人会先把sql语句组装为: 这样,如果有其他过滤条件直接加上“and 其他条件” ...

  3. DataGrid2

    1.DataGrid的button属性设置 CommandName="ToEdit": 对其中的button按钮进行选择: CommandArgument='<%#Eval( ...

  4. transport

    #include<iostream> using namespace std; int transport(int a) { ; ) ; else a=a/; d=; ) { a=a*+; ...

  5. template_12特化与重载

    1,重载函数模板f<int*>((int*)pi);//1f<int>((int*)pi);//2上面用int*替换第一个模板的T,用int来替换第二个模板的T.那么将得到两个 ...

  6. 基类和派生类--this

    基类指针在程序运行的时候的确指向的是一个派生类的对象,但指针的类型仍然是基类指针.C++是一种强类型语言,因此不能用基类指针类型的指针直接调用派生类:而且,同一个类可能有多种不同的派生类,因此不知道实 ...

  7. 使用inotify检测linux目录内文件变化

    #include <unistd.h> #include <sys/inotify.h> #include <stdio.h> #include <error ...

  8. c++const小结

    C++const简单整理,本文的首次是在博客园发布的,如有错误,欢迎大家指正 博客园链接:http://www.cnblogs.com/Forever-Kenlen-Ja/p/3776991.html ...

  9. Oracle 的证也会过期咯

    How does this recertification requirement affect me? If your Database Certification credential is re ...

  10. Oracle物理的体系结构

    体系结构图的学习: 老余服装店的故事 结构图: SQL查询语句 SGA 共享池shared pool 数据缓存区Buffer cache PGA 进程 SQL更新语句 SGA: 日志缓存区 日志文件 ...