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 ...
随机推荐
- Hibernate中Entity实体类的写法
记录下一个Entity类的写法,方便以后查阅: package com.bupt.auth.entity; import java.util.Date; import javax.persistenc ...
- 远程连接postgres,出现server doesnt listen
已修改pg_hdb.conf中的 # IPv4 local connections: host all all 127.0.0.1/32 ...
- 【风马一族_Java】java的一种IDE
IntelliJ IDEA 14 下载地址: IntelliJ IDEA 14 下载 分享几个license: (1) key:IDEA value:61156-YRN2M-5MNCN-NZ8D2-7 ...
- 杂项一之js,<select>标签
一.在aspx页面中实现 修改与删除页面的跳转 前台js部分: 在上部的js部分中写,根据传过来的id,来经行页面的跳转,并把id传过去 js部分就是实现了一个页面跳转的功能 (还有确认框confir ...
- linux服务器修改ssh默认22端口方法
1.登录服务器,打开sshd_config文件 # vim /etc/ssh/sshd_config 2.找到#Port 22,默认是注释掉的,先把前面的#号去掉,再插入一行设置成你想要的端口号,注意 ...
- JS判断鼠标从什么方向进入一个容器
偶然将想到的一个如何判断鼠标从哪个方向进入一个容器的问题.首先想到的是给容器的四个边添加几个块,然后看鼠标进入的时候哪个块先监听到鼠标事件.不过这样麻烦太多了.google了一下找到了一个不错的解决方 ...
- IOC学习
控制反转(Inversion of Control,英文缩写为IoC)是一个重要的面向对象编程的法则来削减计算机程序的耦合问题,也是轻量级的Spring框架的核心. 控制反转一般分为两种类型,依赖注入 ...
- windows创建桌面快捷方式的VBA脚本
Dim wShell, oShortcut 'Dim strDesktop$ ' 为了与VBS兼容, Dim strDesktop ' 这里改写一下,测试通过... Set w ...
- Mysql备份--mysqldump&outfile
1.备份工具mysqldump 客户端和服务器端都能用select outfile 只能写到服务器端 2.按表单位备份 a.单个表备份 mysqldump -uusername -p database ...
- 绘制dot 图
常用参数 格式:dot -T<type> -o<outfile> <infile.dot> 输入文件是<infile.dot>,生成的格式由<ty ...