HDU 3790 最短生成树 (最短路)
Problem Description
给你n个点,m条无向边,每条边都有长度d和花费p,给你起点s终点t,要求输出起点到终点的最短距离及其花费,如果最短距离有多条路线,则输出花费最少的。
Input
输入n,m,点的编号是1~n,然后是m行,每行4个数 a,b,d,p,表示a和b之间有一条边,且其长度为d,花费为p。最后一行是两个数 s,t;起点s,终点。n和m为0时输入结束。
(1<n<=1000, 0<m<100000, s != t)
Output
输出 一行有两个数, 最短距离及其花费。
Sample Input
3 2
1 2 5 6
2 3 4 5
1 3
0 0
Sample Output
9 11
分析:
简单的最短路径问题,但是我们需要额外考虑的就是,最短路径可能不止一条,所以在找到最短路径的同时,还要保证花费最少。
代码
#include<stdio.h>
#include<string.h>
using namespace std;
#define inf 0x1f1f1f1f
int a[1005][1005];///路径长度
int b[1005][1005];///花费
int d[1005];
int p[1005];
int v[1005];
int n,m;
void init(int n)///初始化
{
for(int i=1; i<=n; i++)
for(int j=1; j<=n; j++)
{
a[i][j]=inf;
b[i][j]=inf;
}
}
int main()
{
while(~scanf("%d%d",&n,&m))
{
if(n==0||m==0)break;
init(n);
int x,y,z,q;
for(int i=0; i<m; i++)
{
scanf("%d%d%d%d",&x,&y,&z,&q);
if(a[x][y]==inf)///还没有路径,直接赋值
{
a[x][y]=a[y][x]=z;
b[x][y]=b[y][x]=q;
}
else
{
if(a[x][y]>z||a[x][y]==z&&b[x][y]>q)///原来有路径,但是路径长;或则路径虽然一样,但是花费多
{
a[x][y]=a[y][x]=z;
b[x][y]=b[y][x]=q;
}
}
}
int s,t;
scanf("%d%d",&s,&t);
memset(v,0,sizeof(v));
memset(p,0,sizeof(p));
for(int i=1; i<=n; i++)
{
d[i]=inf;
p[i]=inf;
}
//要点1 初始化起点为0.
/*zhongdian*/d[s]=0;///路径
/*zhongdian*/p[s]=0;///花费
//表示s是起点
for(int i=1; i<=n; i++) ///我们将要所有点.
{
int w,m=inf,t;
for(int j=1; j<=n; j++)
{
if(v[j]==0&&d[j]<m)///先找到目前最短路径~
{
w=j;
m=d[j];
t=p[j];
}
if(v[j]==0&&d[j]==m&&p[j]<t)///再找到最短的花费
{
w=j;
m=d[j];
t=p[j];
}
}
v[w]=1;///做标记,表明你这个点已经走过
for(int j=1; j<=n; j++)
{
if(d[w]+a[w][j]<d[j])///到j的路径能够通过当前最短路径进行权值压缩.就要进行压缩
{
d[j]=d[w]+a[w][j];
p[j]=p[w]+b[w][j];
}
if(d[w]+a[w][j]==d[j])
{
if(p[j]>p[w]+b[w][j])
{
p[j]=p[w]+b[w][j];
}
}
}
}
printf("%d %d\n",d[t],p[t]);
}
}
HDU 3790 最短生成树 (最短路)的更多相关文章
- HDU 3790最短路径问题 [最短路最小花费]
题目链接:[http://acm.hdu.edu.cn/showproblem.php?pid=3790] 最短路径问题 Time Limit: 2000/1000 MS (Java/Others) ...
- HDU 3790 最短路径问题 (最短路)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3790 简单的最短路问题,这题听说有重边.我用spfa和dijkstra写了一遍,没判重边,速度都差不多 ...
- ACM: HDU 3790 最短路径问题-Dijkstra算法
HDU 3790 最短路径问题 Time Limit:1000MS Memory Limit:32768KB 64bit IO Format:%I64d & %I64u Des ...
- HDU - 3790 最短路径问题 (dijkstra算法)
HDU - 3790 最短路径问题 Description 给你n个点,m条无向边,每条边都有长度d和花费p,给你起点s终点t,要求输出起点到终点的最短距离及其花费,如果最短距离有多条路线,则输出花费 ...
- hdu 3790 最短路径问题(两个限制条件的最短路)
http://acm.hdu.edu.cn/showproblem.php?pid=3790 有两个条件:距离和花费.首先要求距离最短,距离相等的条件下花费最小. dijkstra,仅仅是在推断条件时 ...
- HDU(3790),最短路二级标准
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3790 最短路径问题 Time Limit: 2000/1000 MS (Java/Others) ...
- HDU 3790 最短路径问题 (最短路)
题目链接 Problem Description 给你n个点,m条无向边,每条边都有长度d和花费p,给你起点s终点t,要求输出起点到终点的最短距离及其花费,如果最短距离有多条路线,则输出花费最少的. ...
- hdu 3790 最短路径问题(最短路,Dijsktra)
题目 Dijsktra基础题,只是多了一个花费,稍稍变动处理就好 #define _CRT_SECURE_NO_WARNINGS #include<string.h> #include&l ...
- HDU 3790 (最短路 + 花费)
题意: 给你n个点,m条无向边,每条边都有长度d和花费p,给你起点s终点t,要求输出起点到终点的最短距离及其花费,如果最短距离有多条路线,则输出花费最少的. #include<bits/stdc ...
随机推荐
- hadoop对于压缩文件的支持
转载:https://www.cnblogs.com/ggjucheng/archive/2012/04/22/2465580.html hadoop对于压缩格式的是透明识别,我们的MapReduce ...
- APIO/CTSC2017游记
5.10开坑,别问我为啥今天才开始写,前几天玩得太开心了233 5.7 坐火车坐火车,坐地铁坐地铁.其实是第一次坐地铁233.解锁了在地铁上双手玩手机不扶东西站立的姿势? 全程烧流量上QQ,拜大佬约面 ...
- 洛谷 P2888 [USACO07NOV]牛栏Cow Hurdles
题目戳 题目描述 Farmer John wants the cows to prepare for the county jumping competition, so Bessie and the ...
- 吉哥系列故事――完美队形II HDU - 4513(马拉车变一下形)
题意: 求最长回文串...但这个回文串要符合从中间到两头 逐个递减 解析: 在扩散的时候加一个判断就好了 #include <iostream> #include <cstdio&g ...
- JS中数组和字符串具有的方法,以及substring,substr和slice的用法与区别
String 对象属性 属性 描述 constructor 对创建该对象的函数的引用 length 字符串的长度 prototype 允许您向对象添加属性和方法 String 对象方法 方法 描述 ...
- Tajo--一个分布式数据仓库系统(概述)
前言:一直对OS X比较仰慕,刚工作送给自己的第一件大礼就是mac pro,嘿嘿.最近在看一个叫tajo得分布式数据仓库,需要依赖protoc 2.4.1,2.5.0都不work,不知道为啥,我在装2 ...
- 【BZOJ】2956:模积和
Time Limit: 10 Sec Memory Limit: 128 MB Description 求∑∑((n mod i)*(m mod j))其中1<=i<=n,1<=j ...
- Windows用户相关操作
获取所有用户 NET_API_STATUS NetUserEnum( LPCWSTR servername, DWORD level, DWORD filter, LPBYTE* bufptr, DW ...
- HDU.1166 敌兵布阵 (线段树 单点更新 区间查询)
HDU.1166 敌兵布阵 (线段树 单点更新 区间查询) 题意分析 加深理解,重写一遍 代码总览 #include <bits/stdc++.h> #define nmax 100000 ...
- VSAM:视频监控系统 A System for Video Surveillance and Monitoring
VSAM(VideoSurveillance and Monitoring)视频监控系统 Robotics Institute CMU 1:引言 2:试验床介绍 3:基本的视频分析算法:运动目标检测, ...