Heavy Transportation POJ 1797 最短路变形
Heavy Transportation POJ 1797 最短路变形
题意
题意大体就是说在一个地图上,有n个城市,编号从1 2 3 ... n,m条路,每条路都有相应的承重能力,然后让你求从编号为1的城市到编号为n的城市的路线中,最大能经过多重的车。
解题思路
这个题可以使用最短路的思路,不过转移方程变了\(dis[j]=max(dis[j], min(dis[u], e[u][j]))\)。这里dis[j]表示从标号为1的点到达编号为j的点的路径中,最小的承重能力,就像短板效应样,一个木桶所能容纳的水是由最短的木板决定的。
代码实现
//使用优先队列优化的Dijkstra算法
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<vector>
#include<queue>
using namespace std;
const int maxn=1e3+7;
const int inf=0x3f3f3f3f;
struct edge{
int to, cost;
};
struct node{
int d, u;
friend bool operator<(const node a, const node b){
return a.d < b.d;
}
};
int dis[maxn];
bool vis[maxn];
vector<edge> g[maxn];
priority_queue<node> que;
int t, n, m;
void init()
{
for(int i=1; i<=n; i++){
g[i].clear();
vis[i]=0;
dis[i]=-inf;
}
while(!que.empty()) que.pop();
}
void dij(int s)
{
int u, num=0;
edge e;
dis[s]=inf;
node tmp={inf, s}, next;
que.push(tmp);
while(!que.empty() && num<=n)
{
tmp=que.top();
que.pop();
u=tmp.u;
if(vis[u]) continue;
vis[u]=1;
num++;
for(int i=0; i<g[u].size(); i++)
{
e=g[u][i];
if(!vis[e.to] && dis[e.to] < min(dis[u], e.cost) )
{
dis[e.to]=min(dis[u], e.cost);
next.d=dis[e.to];
next.u=e.to;
que.push(next);
}
}
}
}
int main()
{
int cnt=1;
scanf("%d",&t);
while(t--)
{
int u, v;
edge e;
scanf("%d%d", &n, &m);
init();
for(int i=0; i<m; i++)
{
scanf("%d%d%d", &u, &v, &e.cost);
e.to=v;
g[u].push_back(e);
e.to=u;
g[v].push_back(e);
}
dij(1);
printf("Scenario #%d:\n", cnt++);
printf("%d\n\n", dis[n]);
}
return 0;
}
Heavy Transportation POJ 1797 最短路变形的更多相关文章
- poj 1797(最短路变形)
题目链接:http://poj.org/problem?id=1797 思路:题目意思很简单,n个顶点,m条路,每条路上都有最大载重限制,问1->n最大载重量.其实就是一最短路的变形,定义wei ...
- Heavy Transportation POJ - 1797
题意 给你n个点,1为起点,n为终点,要求所有1到n所有路径中每条路径上最小值的最最值. 思路 不想打最短路 跑一边最大生成树,再扫一遍1到n的路径,取最小值即可,类似Frogger POJ - 22 ...
- poj1797 - Heavy Transportation(最大边,最短路变形spfa)
题目大意: 给你以T, 代表T组测试数据,一个n代表有n个点, 一个m代表有m条边, 每条边有三个参数,a,b,c表示从a到b的这条路上最大的承受重量是c, 让你找出一条线路,要求出在这条线路上的最小 ...
- poj 1797 最短路变形dijkstra
题意:题目大意:有n个城市,m条道路,在每条道路上有一个承载量,现在要求从1到n城市最大承载量,而最大承载量就是从城市1到城市n所有通路上的最大承载量 链接:点我 解题思路:其实这个求最大边可以近似于 ...
- kuangbin专题专题四 Heavy Transportation POJ - 1797
题目链接:https://vjudge.net/problem/POJ-1797 思路:请参考我列出的另一个题目,和这个题目要求的值相反,另一个清楚后,这个写的解释就明白了. 另一个类似题目的博客:h ...
- POJ 1797 最短路变形所有路径最小边的最大值
题意:卡车从路上经过,给出顶点 n , 边数 m,然后是a点到b点的权值w(a到b路段的承重),求卡车最重的重量是多少可以从上面经过. 思路:求所有路径中的最小的边的最大值.可以用迪杰斯特拉算法,只需 ...
- POJ - 1797 Heavy Transportation 单源最短路
思路:d(i)表示到达节点i的最大能运输的重量,转移方程d(i) = min(d(u), limit(u, i));注意优先队列应该以重量降序排序来重载小于符号. AC代码 #include < ...
- poj 3013 最短路变形
http://poj.org/problem?id=3013 给出n个点,m个边.给出每个点的权值,每个边的权值.在m条边中选n-1条边使这n个点成为一棵树,root=1,求这棵树的最小费用,费用=树 ...
- POJ 3013最短路变形....
DES:计算输的最小费用.如果不能构成树.输出-1.每条边的费用=所有的子节点权值*这条边的权值.计算第二组样例可以知道树的费用是所有的节点的权值*到根节点的最短路径的长度. 用dij的邻接矩阵形式直 ...
随机推荐
- sh_15_字符串统计操作
sh_15_字符串统计操作 hello_str = "hello hello" # 1. 统计字符串长度 print(len(hello_str)) # 2. 统计某一个小(子)字 ...
- Android_(控件)使用Gallery浏览手机上SD卡中图片
运行截图: (发现后面两张照片是自己自拍,大写的尴尬对图片进行涂鸦了!!!) 程序结构: <?xml version="1.0" encoding="utf-8&q ...
- spark-sql cli 参数 及使用
很难找到spark-sql cli使用的教程,总结下一.启动方法/data/spark-1.4.0-bin-cdh4/bin/spark-sql --master spark://master:707 ...
- dpkg -l 命令返回数值
ubuntu命令: dpkg -l 每条记录对应一个软件包,每条记录的第一,二,三个字符是软件包的状态标识,后边依此时软件包名称,版本号,和简述: 第一个字符为,期望值:包括如下状态: u 状态未 ...
- leetcode-hard-array-454 4sum II-NO
mycode 过不了...我也不知道为什么... class Solution(object): def fourSumCount(self, A, B, C, D): ""& ...
- 理解Dubbo
1.Dubbo应用场景 2.Dubbo支持的协议 3.Dubbo性能比较 4.负载均衡策略 5.容错方案 6.Dubbo vs SpringCloud 7.深入Dubbo需要的技能
- 【SQL】MySQL---using的用法
学习记录: mysql中using的用法为: using()用于两张表的join查询,要求using()指定的列在两个表中均存在,并使用之用于join的条件
- linux卸载Python3
一.卸载Python3 1.卸载python3 rpm -qa|grep python3|xargs rpm -ev --allmatches --nodeps 卸载pyhton3 2.whereis ...
- 如何删除link-local(169.255.0.0) 路由表项
route -n 时你总能看到这样一条路由Destination Gateway Genmask Flags Metric Ref Use Iface169.254.0.0 0.0.0.0 255.2 ...
- appium+python+windows环境配置
一.安装node.js 1:先找到对于电脑合适的node版本进行下载. 我的云盘node版本是7.8.0.地址如下:https://pan.baidu.com/s/19kcpXhCN1AuJAT9CB ...