POJ-1797Heavy Transportation,最短路变形,用dijkstra稍加修改就可以了;
| Time Limit: 3000MS | Memory Limit: 30000K | |
![]() ![]() ![]() ![]() |
![]() ![]() ![]() ![]() |
Description
Hugo Heavy is happy. After the breakdown of the Cargolifter project he can now expand business. But he needs a clever man who tells him whether there really is a way from the place his customer has build his giant steel crane to the place where it is needed
on which all streets can carry the weight.
Fortunately he already has a plan of the city with all streets and bridges and all the allowed weights.Unfortunately he has no idea how to find the the maximum weight capacity in order to tell his customer how heavy the crane may become. But you surely know.
Problem
You are given the plan of the city, described by the streets (with weight limits) between the crossings, which are numbered from 1 to n. Your task is to find the maximum weight that can be transported from crossing 1 (Hugo's place) to crossing n (the customer's
place). You may assume that there is at least one path. All streets can be travelled in both directions.
Input
of the street and the maximum allowed weight, which is positive and not larger than 1000000. There will be at most one street between each pair of crossings.
Output
the scenario with a blank line.
Sample Input
1
3 3
1 2 3
1 3 4
2 3 5
Sample Output
Scenario #1:
4
Source
其实这个题看了好久都没搞懂意思,然后找了找博客原来就是给定n个站点(就这样理解吧),m条路,两个站点之间有且只有一条路,每条路都有一个最大载重量,求整个路径组成的图中的最大的承重;比如,1到2之间的载重是3,超过3便不能从这条路上过,而1到3之间的载重是4,这时已经将图连接起来了,所以最大值是4,如果选1->2->3,则1、2之间的路就不能过重量为5的升降机;
这样,就相当于求一个最大生成树的权值最小的那条边,不过用生成树的方法不是超时就RE,只好用最短路中的一个算法解决了,我们看,既然dijkstra是求单源的最短路,d[i]存储的是从起始点到i点的最短路,那么我们就用它来存起始点到i点权值最小的那个;这样答案不就出来了;想想看,这道题逻辑性很强,求能承载的最大重量实际上是求整个联通图中权值最小的,就像短板原理--能装多少水取决于最短的那块木板;
Kruskal生成树:RE,数组开大了又会超时;
#include<cstdio>
#include<cmath>
#include<cstring>
#include<iostream>
#include<algorithm>
using namespace std;
const int N=1000+10;
struct node
{
int u,v,w;
}a[N];
int n,m,f[N];
int find(int x)
{
return f[x]==-1?x:f[x]=find(f[x]);
}
int cmp(node a,node b)
{
return a.w>b.w;
}
int ks(int n,int m)
{
for(int i=0;i<m;i++)
scanf("%d%d%d",&a[i].u,&a[i].v,&a[i].w);
sort(a,a+m,cmp);
int minn=10000000;
memset(f,-1,sizeof(f));
for(int i=0;i<m;i++)
{
int x=find(a[i].u);
int y=find(a[i].v);
if(x!=y)
{
minn=min(minn,a[i].w);
f[x]=y;
}
if(find(1)==find(n))
break;
}
return minn;
}
int main()
{
int t;
scanf("%d",&t);
int t1=t;
while(t--)
{
memset(a,0,sizeof(a));
scanf("%d%d",&n,&m);
int x=ks(n,m);
printf("Scenario #%d:\n%d\n",t1-t,x);
}
return 0;
}
Dijkstra最短路变形:AC
#include<cstdio>
#include<cmath>
#include<iostream>
#include<cstring>
#include<algorithm>
using namespace std;
const int N=1005;
int w[N][N],v[N],d[N],n,m,t,t1;
void dijkstra()
{
int a,b,c,i,j;
memset(w,0,sizeof(w));
for(i=1; i<=m; i++)
{
scanf("%d%d%d",&a,&b,&c);
w[a][b]=w[b][a]=c;
}
memset(v,0,sizeof(v));
for(i=1; i<=n; i++)
d[i]=w[1][i];
for(i=1;i<=n;i++)
{
int x,m=-1;
for(j=1;j<=n;j++)
if(!v[j]&&d[j]>m)
m=d[x=j];
v[x]=1;
for(j=1;j<=n;j++)
if(!v[j] && d[j]<min(d[x],w[x][j]))
d[j]=min(d[x],w[x][j]);
}
printf("Scenario #%d:\n",t1-t);
printf("%d\n\n",d[n]);
}
int main()
{
scanf("%d",&t);
t1=t;
while(t--)
{
scanf("%d%d",&n,&m);
dijkstra();
}
return 0;
}
POJ-1797Heavy Transportation,最短路变形,用dijkstra稍加修改就可以了;的更多相关文章
- POJ 1797 Heavy Transportation 最短路变形(dijkstra算法)
题目:click here 题意: 有n个城市,m条道路,在每条道路上有一个承载量,现在要求从1到n城市最大承载量,而最大承载量就是从城市1到城市n所有通路上的最大承载量.分析: 其实这个求最大边可以 ...
- POJ 2253 Frogger ( 最短路变形 || 最小生成树 )
题意 : 给出二维平面上 N 个点,前两个点为起点和终点,问你从起点到终点的所有路径中拥有最短两点间距是多少. 分析 : ① 考虑最小生成树中 Kruskal 算法,在建树的过程中贪心的从最小的边一个 ...
- poj 1797Heavy Transportation(dijkstra变形)
题目链接:http://poj.org/problem?id=1797 题意:有n个城市,m条道路,在每条道路上有一个承载量,现在要求从1到n城市最大承载量,而最大承载量就是从城市1到城市n所有通路上 ...
- POJ1797 Heavy Transportation —— 最短路变形
题目链接:http://poj.org/problem?id=1797 Heavy Transportation Time Limit: 3000MS Memory Limit: 30000K T ...
- POJ 2253 Frogger -- 最短路变形
这题的坑点在POJ输出double不能用%.lf而要用%.f...真是神坑. 题意:给出一个无向图,求节点1到2之间的最大边的边权的最小值. 算法:Dijkstra 题目每次选择权值最小的边进行延伸访 ...
- Heavy Transportation POJ 1797 最短路变形
Heavy Transportation POJ 1797 最短路变形 题意 原题链接 题意大体就是说在一个地图上,有n个城市,编号从1 2 3 ... n,m条路,每条路都有相应的承重能力,然后让你 ...
- POJ 3635 - Full Tank? - [最短路变形][手写二叉堆优化Dijkstra][配对堆优化Dijkstra]
题目链接:http://poj.org/problem?id=3635 题意题解等均参考:POJ 3635 - Full Tank? - [最短路变形][优先队列优化Dijkstra]. 一些口胡: ...
- POJ 3635 - Full Tank? - [最短路变形][优先队列优化Dijkstra]
题目链接:http://poj.org/problem?id=3635 Description After going through the receipts from your car trip ...
- POJ 2253 Frogger【最短路变形——路径上最小的最大权】
链接: http://poj.org/problem?id=2253 http://acm.hust.edu.cn/vjudge/contest/view.action?cid=22010#probl ...
随机推荐
- 你不知道的border-radius
对于border-radius这个属性,我们知道它可以用来设置边框圆角,利用它我们可以画出很多形状 这就需要了解到border-radius的各式写法: border-radius的写法: 1.只设置 ...
- python_面向对象(6)
第1章 递归函数 1.1 概述 1.2 练习 1.3 二分查找 第2章 面向对象•类 2.1 类的介绍 2.2 书写格式 2.3 类的属性 2.4 self介绍 2.5 类属性补充 2.6 调用查看静 ...
- Spark SQL catalyst概述和SQL Parser的具体实现
之前已经对spark core做了较为深入的解读,在如今SQL大行其道的背景下,spark中的SQL不仅在离线batch处理中使用广泛,structured streamming的实现也严重依赖spa ...
- Andriod 简介
Andriod系统采用分层架构,分为4层: 应用程序层(Applications) 包含所有安装在手机上的应用程序(包括系统自带的程序) 应用程序框架层(Application Framework) ...
- [转]Android TCP长连接 心跳机制及实现
背景知识 智能手机上的长连接心跳和在Internet上的长连接心跳有什么不同 Android系统的推送和iOS的推送有什么区别 几种推送的实现方式 协议 1XMPP简介 2 MQTT简介 3移动端消息 ...
- zabbix server端配置
# wget http://sourceforge.net/projects/zabbix/files/ZABBIX%20Latest%20Stable/2.0.6/zabbix-2.0.6.tar. ...
- 基于 python 的接口测试框架
项目背景 公司内部的软件采用B/S架构,管理实验室数据,实现数据的存储和分析统计.大部分是数据的增删改查,由于还在开发阶段,所以UI界面的变化非常快,之前尝试过用python+selenium进行UI ...
- dialog - 从 shell 显示对话框
总览 (SYNOPSIS) dialog --clear dialog --create-rc file dialog --print-maxsize dialog common-options bo ...
- 数据库课程设计 PHP web实现
纪念一下自己写的东西.. 都说很垃圾就是了 直接用XAMPP做的 菜鸟网上学的PHP和HTML <!DOCTYPE html> <html> <head> < ...
- 普通平衡树(treap)
题干:6种操作: 1. 插入x数 2. 删除x数(若有多个相同的数,因只删除一个) 3. 查询x数的排名(若有多个相同的数,因输出最小的排名) 4. 查询排名为x的数 5. 求x的前驱(前驱定义为小于 ...



