题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3790

题目大意:题意明了,输出最短路径及其花费。

需要注意的几点:(1)当最短路径相同时,输出最小花费!!!

(2)更新路径的时候要注意更新花费。

 #include <iostream>
#include <cstdio>
using namespace std;
const int INF=;
int map[][],Min,n,cost[][],node[],vis[];
int pr[]; void set()
{
for (int i=; i<=n; i++)
{
vis[i]=;
node[i]=INF;
pr[i]=INF;
for (int j=; j<=n; j++)
{
map[i][j]=INF;
cost[i][j]=INF;
}
}
} void dijkstra(int m)
{
int tm=m;
vis[m]=;
node[m]=;
pr[m]=;
for (int k=; k<=n; k++)
{
Min=INF;
int M=INF;
for (int i=; i<=n; i++)
if(!vis[i])
{
if (node[i]>map[tm][i]+node[tm])
{
node[i]=map[tm][i]+node[tm];
pr[i]=cost[tm][i]+pr[tm];
}
else if(node[i]==map[tm][i]+node[tm])
{
if(pr[i]>cost[tm][i]+pr[tm])
{
node[i]=map[tm][i]+node[tm];
pr[i]=cost[tm][i]+pr[tm];
}
}
if (Min>node[i])
{
M=pr[i];
Min=node[i];
m=i;
}
else if (Min==node[i])
{
if(M>pr[i])
{
M=pr[i];
Min=node[i];
m=i;
}
}
}
vis[m]=;
tm=m;
}
} int main ()
{
int a,b,d,p,m;
while(scanf("%d%d",&n,&m),n||m)
{
set();
while (m--)
{
scanf("%d%d%d%d",&a,&b,&d,&p);
if (map[a][b]>d)
{
cost[a][b]=cost[b][a]=p;
map[a][b]=map[b][a]=d;
}
else if (map[a][b]==d)
{
if (cost[a][b]>p)
cost[a][b]=cost[b][a]=p;
}
}
scanf("%d%d",&a,&b);
dijkstra(a);
printf ("%d %d\n",node[b],pr[b]);
}
}

一种简单明了的代码。

 #include <iostream>
#include <cstdio> using namespace std; const int INF=; int Map[][],Min,Mmin,n,cost[][],node[],vis[];
int pr[],tm; void sett()
{
for (int i=; i<=n; i++)
{
node[i]=INF;
vis[i]=;
pr[i]=INF;
for (int j=; j<=n; j++)
{
Map[i][j]=INF;
cost[i][j]=INF;
}
}
} int dijkstra()
{
for (int i=; i<=n; i++)
{
Min=INF;
Mmin=INF;
for (int j=; j<=n; j++)
{
if (!vis[j])
{
if (Min>node[j])
{
Min=node[j];
Mmin=pr[j];
tm=j;
}
else if (Min==node[j])
{
if (Mmin>pr[j])
{
Mmin=pr[j];
tm=j;
}
}
}
}
vis[tm]=;
for (int j=; j<=n; j++)
if (!vis[j])
{
if (node[j]>Map[tm][j]+node[tm])
{
node[j]=Map[tm][j]+node[tm];
pr[j]=cost[tm][j]+pr[tm];
}
else if (node[j]==Map[tm][j]+node[tm])
{
if (pr[j]>cost[tm][j]+pr[tm])
{
node[j]=Map[tm][j]+node[tm];
pr[j]=cost[tm][j]+pr[tm];
}
}
}
}
} int main ()
{
int m,a,b,d,p,s,t;
while (~scanf("%d%d",&n,&m))
{
if (n==&&m==)
break;
sett();
for (int i=; i<=m; i++)
{
scanf("%d%d%d%d",&a,&b,&d,&p);
if (Map[a][b]>d)
{
Map[a][b]=Map[b][a]=d;
cost[a][b]=cost[b][a]=p;
}
else if (Map[a][b]==d)
{
if (cost[a][b]>p)
cost[a][b]=cost[b][a]=p;
}
}
scanf("%d%d",&s,&t);
node[s]=;
pr[s]=;
dijkstra();
printf ("%d %d\n",node[t],pr[t]);
}
}

hdu 3790 最短路径问题(双重权值,dijkstra算法)的更多相关文章

  1. HDU 3790(两种权值的迪杰斯特拉算法)

    传送门: http://acm.hdu.edu.cn/showproblem.php?pid=3790 最短路径问题 Time Limit: 2000/1000 MS (Java/Others)    ...

  2. hdu-3790 最短路径问题(双重权值)

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

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

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

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

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

  5. HDU 1874 畅通工程续(初涉dijkstra算法实现)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1874 dijkstra算法实现可参照此博客学习:http://www.cnblogs.com/biye ...

  6. HDU-3790 最短路径问题(双重权值)

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

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

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

  8. hdu 1565&hdu 1569(网络流--最小点权值覆盖)

    方格取数(1) Time Limit: 10000/5000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Su ...

  9. HDU - 5592 ZYB's Premutation (权值线段树)

    题意:给出序列前k项中的逆序对数,构造出这个序列. 分析:使用权值线段树来确定序列元素. 逆序对的数量肯定是递增的,从最后一个元素开始逆向统计,则\(a[i] - a[i-1]\)即位置i之前比位置i ...

随机推荐

  1. 图解linux安装tomcat(附常用命令)

    本例使用的是centos6.5版本,具体内容如下 一.首先到官方下载tomcat服务 http://tomcat.apache.org/download-70.cgi 二.将tomcat上传至linu ...

  2. 让你的SilverLight程序部署在任意服务器上

    是的,即使是免费的只支持HTML的空间,同样可以部署SilverLight应用.众所周知,SilverLight的部署问题其实就是.xap文件名是否能被服务器支持的问题.解决的方法无非就是添加MIME ...

  3. 【Python】PYTHON中STRIP()方法学习笔记

    Python strip() 方法用于移除字符串头尾指定的字符(默认为空格). 当使用strip('xxx'),只要字符串头尾有"xxx"中的一个,就会去掉,而不是符合字符串''x ...

  4. bzoj2437-兔兔与蛋蛋

    题目 分析 第一次做这种题,其实很简单. 只能经过一次的博弈可以考虑转化为二分图博弈. 棋盘上有黑白色的棋子,可以把这个游戏看作空格在棋子间移动,于是就想到,把棋盘黑白染色,以空格为黑,那么空格的移动 ...

  5. BZOJ 1076 奖励关(状压期望DP)

    当前得分期望=(上一轮得分期望+这一轮得分)/m dp[i,j]:第i轮拿的物品方案为j的最优得分期望 如果我们正着去做,会出现从不合法状态(比如前i个根本无法达到j这种方案),所以从后向前推 如果当 ...

  6. poj2018——Best Cow Fences

    Description Farmer John's farm consists of a long row of N (1 <= N <= 100,000)fields. Each fie ...

  7. [NOI.AC省选模拟赛3.31] 附耳而至 [平面图+最小割]

    题面 传送门 思路 其实就是很明显的平面图模型. 不咕咕咕的平面图学习笔记 用最左转线求出对偶图的点,以及原图中每个边两侧的点是谁 建立网络流图: 源点连接至每一个对偶图点,权值为这个区域的光明能量 ...

  8. [NOI2009]诗人小G 决策单调性优化DP

    第一次写这种二分来优化决策单调性的问题.... 调了好久,,,各种细节问题 显然有DP方程: $f[i]=min(f[j] + qpow(abs(sum[i] - sum[j] - L - 1))); ...

  9. BZOJ3197:[SDOI2013]刺客信条——题解

    https://www.lydsy.com/JudgeOnline/problem.php?id=3197 故事发生在1486 年的意大利,Ezio 原本只是一个文艺复兴时期的贵族,后来因为家族成员受 ...

  10. 除了love和hate,还能怎么表达那些年的“爱恨情仇”?

    实用英语 帮你全面提高英语水平 关注 童鞋们每次刷美剧的时候,相信都会被CP感满满的男女主角虐得体无完肤吧. 可是,一到我们自己表达爱意或者恨意的时候,却苦于词穷,只会用love, like, hat ...