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的邻接矩阵形式直 ...
随机推荐
- websocket 连接测试端口服务是否正常代码
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...
- Ubuntu安装之pycharm安装
什么??公司要用Ubuntu(乌班图)?不会用??怎么进行python开发??? 乌班图操作系统下载地址:http://releases.ubuntu.com/18.04/ubuntu-18.04.1 ...
- AcWing:173. 矩阵距离(bfs)
给定一个N行M列的01矩阵A,A[i][j] 与 A[k][l] 之间的曼哈顿距离定义为: dist(A[i][j],A[k][l])=|i−k|+|j−l|dist(A[i][j],A[k][l]) ...
- Vue_(组件通讯)动态组件结合keep-alive
keep-alive 传送门 <keep-alive> 包裹动态组件时,会缓存不活动的组件实例,而不是销毁它们.和 <transition> 相似,<keep-alive ...
- JVM-GC算法(一)-标记清除算法
首先,我们得知道根搜索算法,它可以解决我们应该回收哪些对象的问题,但是它显然还不能承担垃圾搜集的重任,因为我们在程序(程序也就是指我们运行在JVM上的JAVA程序)运行期间如果想进行垃圾回收,就必须让 ...
- koa 基础(六)应用级路由中间件
1.应用级路由中间件 app.js /** * 应用级路由中间件 */ // 引入模块 const Koa = require('koa'); const router = require('koa- ...
- Linux 安全工具之extundelete误删除恢复
一:前言 在Linux中,我们通常会因为误删除文件而感到烦恼,rm -rf +文件 rf参数简直就是每个运维的噩梦,但是大家想过没,为什么删除文件那么快呢,为什么我们copy文件的时候那么慢. 其实 ...
- [windows菜鸟]Windows API函数大全(完整)
Windows API函数大全,从事软件开发的朋友可以参考下 1. API之网络函数 WNetAddConnection 创建同一个网络资源的永久性连接 WNetAddConnection2 创建同一 ...
- Android中图片的三级缓存
为什么要使用三级缓存 如今的 Android App 经常会需要网络交互,通过网络获取图片是再正常不过的事了 假如每次启动的时候都从网络拉取图片的话,势必会消耗很多流量.在当前的状况下,对于非wifi ...
- 机器学习之SVM算法
1.知识点 """ SVM,也称支持向量机:其优化核心为求取点到平面的距离最大化,主要是解决二分类问题 y = wx+b ,且 yi * y(i) >0 恒成立 思 ...