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 ...
随机推荐
- 【Leetcode】725. Split Linked List in Parts
Given a (singly) linked list with head node root, write a function to split the linked list into k c ...
- shell 一些符号的使用
给你个全的,你在Linux环境下多试下就明白了:$0 这个程式的执行名字$n 这个程式的第n个参数值,n=1..9$* 这个程式的所有参数,此选项参数可超过9个.$# 这个程式的参数个数$$ 这个程式 ...
- Docker 入门 到部署Web 程序- (阿里面试常用的docker命令和优点)
最近阿里的面试官问我Docker是做什么用的,我记得之前360和美团,京东的都问过,但是一直没时间看,最近有时间了,系统的学习了一下Docker,在此做一下记录,方便各位看官学习交流 一.Docker ...
- JSP 问题总结
<input type="button" value="返回" onclick="javascript:window.location.href ...
- 第187天:js基础---常见的Bom对象
BOM(Browser Object Mode)浏览器对象模型,是Javascript的重要组成部分.它提供了一系列对象用于与浏览器窗口进行交互,这些对象通常统称为BOM. 一张图了解一下先 1.wi ...
- 在mvc4中上传、导入和导出excel表方法总结
通过excel的导入导出练习,使用NPOI组件还是方便一点,所有下面就以NPOI下的导入导出给出实例,通过网页导入excel表,首先上传,再导入数据到库,这里为了方便就不导入到库中了,直接拿到数据.导 ...
- noip模拟题《戏》game
[问题背景] zhx 和他的妹子(们) 做游戏.[问题描述] 考虑 N 个人玩一个游戏,任意两个人之间进行一场游戏(共 N*(N-1)/2 场),且每场一定能分出胜负. ...
- Java Servlet异步处理、非阻塞I/O和文件上传
异步处理 应用服务器中的 web容器通常对各个客户端情求分别使用一个服务器线程.在工作负载很繁重的情况下,容器常要大量线程来为所有客户端请求服务.可扩展性限制包括内存用尽,或容器线程池耗尽.为了创建可 ...
- 深入理解JVM一类加载器原理
我们知道我们编写的java代码,会经过编译器编译成字节码文件(class文件),再把字节码文件装载到JVM中,映射到各个内存区域中,我们的程序就可以在内存中运行了.那么字节码文件是怎样装载到JVM中的 ...
- 考研路茫茫――单词情结 HDU - 2243(ac自动机 + 矩阵快速幂)
考研路茫茫——单词情结 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total ...