poj 1797 Heavy Transportation(最短路变种2,连通图的最小边)
改动见下,请自行画图理解
具体细节也请看下面的代码:
这个花了300多ms
- #define _CRT_SECURE_NO_WARNINGS
- #include<string.h>
- #include<stdio.h>
- #include<math.h>
- #include<algorithm>
- using namespace std;
- const int MAXN=;
- #define typec int
- const typec INF=;//防止后面溢出,这个不能太大
- bool vis[MAXN];
- typec cost[MAXN][MAXN];
- typec lowcost[MAXN];
- void Dijkstra(int n,int beg) //连通图的最小边——最短路变种2,恰好和poj 2253 相反
- {
- for(int i=;i<=n;i++)
- {
- lowcost[i]=cost[beg][i];vis[i]=false;//因为初始化都在这里了,所以后面的对起点的初始化可以省去
- }
- for(int i=;i<=n;i++)
- {
- typec temp=-;//此处改动
- int k=-;
- for(int j=;j<=n;j++)
- {
- if(!vis[j]&&lowcost[j]>temp)//此处改动
- {
- temp=lowcost[j];
- k=j;
- }
- }
- vis[k]=true;
- for(int l=;l<=n;l++)
- {
- if(!vis[l])
- {
- lowcost[l]=max(min(lowcost[k],cost[k][l]),lowcost[l]);//原来改动在这列,具体可画图求证感知
- }
- }
- }
- }
- int main()
- {
- int n,i,id=,t,m,a,b,c;
- scanf("%d",&t);
- for(;id<=t;)
- {
- scanf("%d%d",&n,&m);//路口数和街道数不要反了!
- memset(cost,,sizeof(cost));//初始化请注意,这里要都变为0,相当于无法运货,即载重量为0
- for(i=;i<=m;i++)
- {
- scanf("%d%d%d",&a,&b,&c);
- cost[a][b]=cost[b][a]=c;//这里请注意
- }
- Dijkstra(n,);
- printf("Scenario #%d:\n%d\n\n",id++,lowcost[n]);//居然在输出这里跪了
- }
- return ;
- }
在初始化时改一笔我觉得更容易理解,在此处也可以AC,但是时间多了,代码如下,花了400多ms
- #define _CRT_SECURE_NO_WARNINGS
- #include<string.h>
- #include<stdio.h>
- #include<math.h>
- #include<algorithm>
- using namespace std;
- const int MAXN=;
- #define typec int
- const typec INF=0x3f3f3f3f;//防止后面溢出,这个不能太大
- bool vis[MAXN];
- typec cost[MAXN][MAXN];
- typec lowcost[MAXN];
- void Dijkstra(int n,int beg) //连通图的最小边——最短路变种2,恰好和poj 2253 相反
- {
- for(int i=;i<=n;i++)
- {
- lowcost[i]=cost[beg][i];vis[i]=false;//因为初始化都在这里了,所以后面的对起点的初始化可以省去
- }
- for(int i=;i<=n;i++)
- {
- typec temp=-;//此处改动
- int k=-;
- for(int j=;j<=n;j++)
- {
- if(!vis[j]&&lowcost[j]>temp)//此处改动
- {
- temp=lowcost[j];
- k=j;
- }
- }
- vis[k]=true;
- for(int l=;l<=n;l++)
- {
- if(!vis[l])
- {
- lowcost[l]=max(min(lowcost[k],cost[k][l]),lowcost[l]);//原来改动在这列,具体可画图求证感知
- }
- }
- }
- }
- int main()
- {
- int n,i,id=,t,m,a,b,c;
- scanf("%d",&t);
- for(;id<=t;)
- {
- scanf("%d%d",&n,&m);//路口数和街道数不要反了!
- memset(cost,,sizeof(cost));//初始化请注意,这里要都变为0,相当于无法运货,即载重量为0
- for(i=;i<=n;i++)
- cost[i][i]=INF; //感觉加了这个更容易理解,因为是同一地方,载重量可以无限大
- for(i=;i<=m;i++)
- {
- scanf("%d%d%d",&a,&b,&c);
- cost[a][b]=cost[b][a]=c;//这里请注意
- }
- Dijkstra(n,);
- printf("Scenario #%d:\n%d\n\n",id++,lowcost[n]);//居然在输出这里跪了
- }
- return ;
- }
poj 1797 Heavy Transportation(最短路变种2,连通图的最小边)的更多相关文章
- POJ 1797 Heavy Transportation (最短路)
Heavy Transportation Time Limit: 3000MS Memory Limit: 30000K Total Submissions: 22440 Accepted: ...
- POJ 1797 Heavy Transportation 最短路变形(dijkstra算法)
题目:click here 题意: 有n个城市,m条道路,在每条道路上有一个承载量,现在要求从1到n城市最大承载量,而最大承载量就是从城市1到城市n所有通路上的最大承载量.分析: 其实这个求最大边可以 ...
- POJ 1797 Heavy Transportation(Dijkstra变形——最长路径最小权值)
题目链接: http://poj.org/problem?id=1797 Background Hugo Heavy is happy. After the breakdown of the Carg ...
- poj 1797 Heavy Transportation(最大生成树)
poj 1797 Heavy Transportation Description Background Hugo Heavy is happy. After the breakdown of the ...
- POJ 1797 Heavy Transportation / SCU 1819 Heavy Transportation (图论,最短路径)
POJ 1797 Heavy Transportation / SCU 1819 Heavy Transportation (图论,最短路径) Description Background Hugo ...
- POJ.1797 Heavy Transportation (Dijkstra变形)
POJ.1797 Heavy Transportation (Dijkstra变形) 题意分析 给出n个点,m条边的城市网络,其中 x y d 代表由x到y(或由y到x)的公路所能承受的最大重量为d, ...
- POJ 1797 Heavy Transportation
题目链接:http://poj.org/problem?id=1797 Heavy Transportation Time Limit: 3000MS Memory Limit: 30000K T ...
- POJ 1797 Heavy Transportation SPFA变形
原题链接:http://poj.org/problem?id=1797 Heavy Transportation Time Limit: 3000MS Memory Limit: 30000K T ...
- POJ 1797 ——Heavy Transportation——————【最短路、Dijkstra、最短边最大化】
Heavy Transportation Time Limit:3000MS Memory Limit:30000KB 64bit IO Format:%I64d & %I64 ...
随机推荐
- linux exec函数族
1.简介 在Linux中,并不存在exec()函数,exec指的是一组函数,一共有6个,分别是: #include <unistd.h> extern char **environ; ...
- 去掉影响效率的where 1=1
最近看了篇文章,觉得挺有道理.实际项目中,我们进行sql条件过滤,我们不能确定是不是有条件.也不能确定条件的个数.大多数人会先把sql语句组装为: 这样,如果有其他过滤条件直接加上“and 其他条件” ...
- DataGrid2
1.DataGrid的button属性设置 CommandName="ToEdit": 对其中的button按钮进行选择: CommandArgument='<%#Eval( ...
- transport
#include<iostream> using namespace std; int transport(int a) { ; ) ; else a=a/; d=; ) { a=a*+; ...
- template_12特化与重载
1,重载函数模板f<int*>((int*)pi);//1f<int>((int*)pi);//2上面用int*替换第一个模板的T,用int来替换第二个模板的T.那么将得到两个 ...
- 基类和派生类--this
基类指针在程序运行的时候的确指向的是一个派生类的对象,但指针的类型仍然是基类指针.C++是一种强类型语言,因此不能用基类指针类型的指针直接调用派生类:而且,同一个类可能有多种不同的派生类,因此不知道实 ...
- 使用inotify检测linux目录内文件变化
#include <unistd.h> #include <sys/inotify.h> #include <stdio.h> #include <error ...
- c++const小结
C++const简单整理,本文的首次是在博客园发布的,如有错误,欢迎大家指正 博客园链接:http://www.cnblogs.com/Forever-Kenlen-Ja/p/3776991.html ...
- Oracle 的证也会过期咯
How does this recertification requirement affect me? If your Database Certification credential is re ...
- Oracle物理的体系结构
体系结构图的学习: 老余服装店的故事 结构图: SQL查询语句 SGA 共享池shared pool 数据缓存区Buffer cache PGA 进程 SQL更新语句 SGA: 日志缓存区 日志文件 ...