题目链接:

http://acm.hdu.edu.cn/showproblem.php?pid=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
 
Source
 题意描述:
输入顶点的个数n和道路的条数m以及起始点数s和t((1<n<=1000, 0<m<100000, s != t))
计算并输出最短距离及其花费(如果最短路径数相同,输出花费最小)
解题思路:
哇,读到这个题,心想求最短路径和最小花费,直接两边DijkstraOK,直接WA。
后来想想,先要保证路径最短,那么就先求最短路径,Dijkstra不变,只不过最后更新的时候处理一下最小花费就行了,具体处理方法见代码。
另外,既然存在路径相同而花费不同,那么必然输入数据存在两顶点相同,路径相同,但花费不同的数据,所以输入的时候我们只保留相同情况下花费最小即可。
题目很经典,如需了解
最长路径最小权值 请参考博客:http://www.cnblogs.com/wenzhixin/p/7336948.html
最短路径最大权值 请参考博客:http://www.cnblogs.com/wenzhixin/p/7406333.html
AC代码:
 #include<stdio.h>
int e1[][],e2[][];
int inf=,n,m,s,t;
void Dijkstra();
int main()
{
int i,j,t1,t2,t3,t4;
while(scanf("%d%d",&n,&m), n+m != )
{
for(i=;i<=n;i++)//全部初始化为inf
for(j=;j<=n;j++)
e1[i][j]=e2[i][j]=inf;//i和j for(i=;i<=m;i++)
{
scanf("%d%d%d%d",&t1,&t2,&t3,&t4);
if(e1[t1][t2] > t3)//存储的时候就去重,先保证路径最短,否则如
//果相等且花费变小则更新花费
{
e1[t1][t2]=e1[t2][t1]=t3;//双向
e2[t1][t2]=e2[t2][t1]=t4;
}
else if(e1[t1][t2] == t3 && e2[t1][t2] > t4)
e2[t1][t2]=e2[t2][t1]=t4;
}
scanf("%d%d",&s,&t); Dijkstra();
}
return ;
}
void Dijkstra()
{
int i,j,u,v,min,d[],c[],book[];
for(i=;i<=n;i++)
{
d[i]=e1[s][i];
c[i]=e2[s][i];
}
for(i=;i<=n;i++)
book[i]=;//初始化为0
book[s]=; for(i=;i<=n-;i++)
{
min=inf;
for(j=;j<=n;j++)
{//找到距离s点最近的尚未访问的点
if(!book[j] && d[j] < min)
{
min=d[j];
u=j;
}
}
book[u]=;
for(v=;v<=n;v++)//遍历每个顶点
{
if(!book[v] && e1[u][v] < inf)
{//加入点U后,更新每个顶点到s的距离为最近,便于下次查找
if(d[v] > d[u]+e1[u][v])
{//和之前的去重一样,在保证最短路径且花费减少时 才更新最小花费
d[v]=d[u]+e1[u][v];
c[v]=c[u]+e2[u][v];
}
else if(d[v] == d[u]+e1[u][v] && c[v] > c[u]+e2[u][v])
c[v] = c[u]+e2[u][v];
}
}
}
printf("%d %d\n",d[t],c[t]);
}

POJ 3790 最短路径问题(Dijkstra变形——最短路径双重最小权值)的更多相关文章

  1. POJ 2253 Frogger(Dijkstra变形——最短路径最大权值)

    题目链接: http://poj.org/problem?id=2253 Description Freddy Frog is sitting on a stone in the middle of ...

  2. POJ 1797 Heavy Transportation(Dijkstra变形——最长路径最小权值)

    题目链接: http://poj.org/problem?id=1797 Background Hugo Heavy is happy. After the breakdown of the Carg ...

  3. POJ.1797 Heavy Transportation (Dijkstra变形)

    POJ.1797 Heavy Transportation (Dijkstra变形) 题意分析 给出n个点,m条边的城市网络,其中 x y d 代表由x到y(或由y到x)的公路所能承受的最大重量为d, ...

  4. POJ 3565 Ants 【最小权值匹配应用】

    传送门:http://poj.org/problem?id=3565 Ants Time Limit: 5000MS   Memory Limit: 65536K Total Submissions: ...

  5. POJ 2195 Going Home 【二分图最小权值匹配】

    传送门:http://poj.org/problem?id=2195 Going Home Time Limit: 1000MS   Memory Limit: 65536K Total Submis ...

  6. 【POJ 2400】 Supervisor, Supervisee(KM求最小权匹配)

    [POJ 2400] Supervisor, Supervisee(KM求最小权匹配) Supervisor, Supervisee Time Limit: 1000MS   Memory Limit ...

  7. POJ 3255 Roadblocks (Dijkstra求最短路径的变形)(Dijkstra求次短路径)

    Roadblocks Time Limit: 2000MS   Memory Limit: 65536K Total Submissions: 16425   Accepted: 5797 Descr ...

  8. NYOJ 1248 海岛争霸(Dijkstra变形——最短路径最大权值)

    题目链接: http://acm.nyist.net/JudgeOnline/problem.php?pid=1248 描述 神秘的海洋,惊险的探险之路,打捞海底宝藏,激烈的海战,海盗劫富等等.加勒比 ...

  9. POJ - 2253 Frogger(Dijkstra变形题)

    题意: 题目撰写者的英语真是艰难晦涩,看了别人题解,才知道这题题意. 两个forger 一个froger 要蹦到另外一个froger处,他们的最短距离是这样定义的 : The frog distanc ...

随机推荐

  1. ConcurrentHashMap 从Java7 到 Java8的改变

    一.关于分段锁 集合框架很大程度减少了java程序员的重复劳动,然而,在Java多线程环境中,以线程安全的方式使用集合类是一个首先考虑的问题. 越来越多的程序员了解到了ConcurrentHashMa ...

  2. 类的更新----MVC设计模式

    <?php class stdObject { public function __construct(array $arguments = array()) { if (!empty($arg ...

  3. Python 项目实践三(Web应用程序)第四篇

    接着上节继续学习,本章将建立用户账户 Web应用程序的核心是让任何用户都能够注册账户并能够使用它,不管用户身处何方.在本章中,你将创建一些表单,让用户能够添加主题和条目,以及编辑既有的条目.你还将学习 ...

  4. 例子:web版坦克大战1.0

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  5. Centos 7 防火墙firewalld命令

    今天自己在Hyper-v下搭建三台Linux服务器集群,用于学习ELKstack(即大数据日志解决技术栈Elasticsearch,Logstash,Kibana的简称),下载的Linux版本为cen ...

  6. swift内存管理中的引用计数

    在swift中,每一个对象都有生命周期,当生命周期结束会调用deinit()函数进行释放内存空间. 观察这一段代码: class Person{ var name: String var pet: P ...

  7. java内存溢出问题

    相信有一定java开发经验的人或多或少都会遇到OutOfMemoryError的问题,这个问题曾困扰了我很长时间,随着解决各类问题经验的积累以及对问题根源的探索,终于有了一个比较深入的认识. 在解决j ...

  8. 转:java.lang.OutOfMemoryError: Java heap space错误及处理办法(收集整理、转)

    以下是从网上找到的关于堆空间溢出的错误解决办法: Java.lang.OutOfMemoryError: Java heap space =============================== ...

  9. Micropython实战之TPYBoardv102 DIY金属检测仪

    转载请以链接形式注明文章来源(MicroPythonQQ技术交流群:157816561,公众号:MicroPython玩家汇) 1.实验目的 1.学习在PC机系统中扩展简单I/O接口的方法. 2.进一 ...

  10. PHP中域名绑定

    1.如果是集成环境,比如phpstudy则可以直接在工具中点击其他选项菜单->站点域名管理填好对应的域名和站点目录后点击新增,然后点击保存设置并生成配置文件,然后再打开hosts文件,增加对应的 ...