http://acm.hdu.edu.cn/showproblem.php?pid=3790

有两个条件:距离和花费。首先要求距离最短,距离相等的条件下花费最小。

dijkstra,仅仅是在推断条件时多考虑了花费。

注意重边。



#include <stdio.h>
#include <algorithm>
#include <set>
#include <map>
#include <vector>
#include <math.h>
#include <string.h>
#include <stack>
#include <queue>
#define LL long long
#define _LL __int64
using namespace std; const int INF = 0x3f3f3f3f;
const int maxn = 1010;
int Map[maxn][maxn],cost[maxn][maxn];
int n,m;
int dis1[maxn],dis2[maxn]; void init()
{
for(int i = 1; i <= n; i++)
{
for(int j = 1; j <= n; j++)
{
if(i == j)
{
Map[i][j] = 0;
cost[i][j] = 0;
}
else
{
Map[i][j] = INF;
cost[i][j] = INF;
}
}
}
} void dijkstra(int s, int t)
{
int vis[maxn];
memset(dis1,INF,sizeof(dis1));
memset(dis2,INF,sizeof(dis2));
memset(vis,0,sizeof(vis)); for(int i = 1; i <= n; i++)
{
dis1[i] = Map[s][i];
dis2[i] = cost[s][i];
}
vis[s] = 1; for(int i = 1; i <= n; i++)
{
int M1= INF, M2 = INF, pos; for(int j = 1; j <= n; j++)
{
if(vis[j]) continue;
if(dis1[j] < M1 || (dis1[j] == M1 && dis2[j] < M2))
{
M1 = dis1[j];
M2 = dis2[j];
pos = j;
}
} vis[pos] = 1; for(int j = 1; j <= n; j++)
{
if(vis[j]) continue;
int tmp1 = dis1[pos] + Map[pos][j];
int tmp2 = dis2[pos] + cost[pos][j];
if(tmp1 < dis1[j] || (tmp1 == dis1[j] && tmp2 < dis2[j]))
{
dis1[j] = tmp1;
dis2[j] = tmp2;
}
}
}
} int main()
{
while(~scanf("%d %d",&n,&m))
{
if(n == 0 || m == 0) break;
init();
int a,b,d,p;
while(m--)
{
scanf("%d %d %d %d",&a,&b,&d,&p);
if(Map[a][b] == INF && cost[a][b] == INF)
{
Map[a][b] = Map[b][a] = d;
cost[a][b] = cost[b][a] = p;
}
else if(d < Map[a][b] || (Map[a][b] == d && cost[a][b] > p))
{
Map[a][b] = Map[b][a]= d;
cost[a][b] = cost[b][a] = p;
}
}
scanf("%d %d",&a,&b);
dijkstra(a,b);
printf("%d %d\n",dis1[b],dis2[b]);
}
return 0;
}



hdu 3790 最短路径问题(两个限制条件的最短路)的更多相关文章

  1. ACM: HDU 3790 最短路径问题-Dijkstra算法

    HDU 3790 最短路径问题 Time Limit:1000MS     Memory Limit:32768KB     64bit IO Format:%I64d & %I64u Des ...

  2. HDU - 3790 最短路径问题 (dijkstra算法)

    HDU - 3790 最短路径问题 Description 给你n个点,m条无向边,每条边都有长度d和花费p,给你起点s终点t,要求输出起点到终点的最短距离及其花费,如果最短距离有多条路线,则输出花费 ...

  3. HDU 3790最短路径问题 [最短路最小花费]

    题目链接:[http://acm.hdu.edu.cn/showproblem.php?pid=3790] 最短路径问题 Time Limit: 2000/1000 MS (Java/Others)  ...

  4. hdu 3790 最短路径问题(双重权值,dijkstra算法)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3790 题目大意:题意明了,输出最短路径及其花费. 需要注意的几点:(1)当最短路径相同时,输出最小花费 ...

  5. HDU 3790 最短路径问题 (最短路)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3790 简单的最短路问题,这题听说有重边.我用spfa和dijkstra写了一遍,没判重边,速度都差不多 ...

  6. #HDU 3790 最短路径问题 【Dijkstra入门题】

    题目: 最短路径问题 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total ...

  7. 题解报告:hdu 3790 最短路径问题

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3790 Problem Description 给你n个点,m条无向边,每条边都有长度d和花费p,给你起 ...

  8. hdu 3790 最短路径问题(迪杰斯特拉)

    最短路径问题 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Subm ...

  9. hdu 3790 最短路径dijkstra(多重权值)

    最短路径问题 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Subm ...

随机推荐

  1. 基于opencv的人脸检测的web应用

    参考资料 https://github.com/bsdnoobz/web-based-face-detect http://opencv-code.com/projects/web-based-int ...

  2. SpringMVC + Spring + MyBatis 学习笔记:为MyBatis增加打印SQL功能 (最简化配置)

    系统:WIN8.1 数据库:Oracle 11GR2 开发工具:MyEclipse 8.6 框架:Spring3.2.9.SpringMVC3.2.9.MyBatis3.2.8 1.以下jar包拷贝到 ...

  3. Kali vmtools

    参考链接:http://www.leavesongs.com/SHARE/kali-vmtools-install.html   安装环境:kali-1.1.0 ---3.18.0-kali1-amd ...

  4. Android Capture Android System Audio

    项目需要获取播放视频的实时音量值,最简捷的方法是监听音频输出端,取得音频输出流,再进行转换. 调查时,首先找到这篇博客: http://blog.csdn.net/jinzhuojun/article ...

  5. Linux下U盘的挂载和文件的拷贝

    把文件通过U盘拷贝到linux系统下插好U盘后,查看磁盘情况fdisk -l正常情况下有 Disk /dev/sda:2045 MB,2045247488 bytes47 heads,46 secto ...

  6. Page Scroll Menu (页面中锚点菜单)

    Technorati 标签: Page Scroll Menu,页面锚点菜单,Menu,Too Long,页面太长   当页面太长时,会导致浏览不便,这时就需要一个页面锚点菜单(Page Scroll ...

  7. cubieboard中使用py-kms与dnsmasq搭建局域网内全自动KMS激活环境

    众所周知,KMS激活方式是当前广大网民“试用”windows,office的最广泛的激活方式.几乎可以用于微软的全线产品. 但是在本机使用KMS类的激活工具总是有些不放心,一方面每隔180天都要重新激 ...

  8. 【转】Java transient关键字

    Volatile修饰的成员变量在每次被线程访问时,都强迫从主内存中重读该成员变量的值.而且,当成员变量发生变化时,强迫线程将变化值回写到主内存.这样在任何时刻,两个不同的线程总是看到某个成员变量的同一 ...

  9. 在Windows Server2008R2中导入Excel不能使用Jet 4.0的解决方法

    一直使用以下代码从Excel中取数据,速度快方便: string strConn = "Provider=Microsoft.Jet.OLEDB.4.0;" + "Dat ...

  10. MecAnim

    [MecAnim] MecAnim是Unity 4.0推出的新的动画系统,新系统使用Animator组件来控制动画,老系统使用Animation组件来控制动画.此篇讲述MecAnim系统. What ...