题目链接: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. java 基础--数组--004

    1,数组定义格式 String[] aa; String aa[];2,二位数组的定义格式1 String aa[][] = new String[m][n]; String[] aa[] = new ...

  2. 分离IE9以下浏览器

    /*判断浏览器版本是否过低*/ function IETester(userAgent) { var UA = userAgent || navigator.userAgent; if (/msie/ ...

  3. Redis的RDB和AOF持久化

    RDB 持久化:在指定的时间间隔内生成数据集的时间点快照. AOF 持久化:记录服务器执行的所有写操作命令,并在服务器启动时,通过重新执行这些命令来还原数据集. RDB 它只保存了 Redis 在某个 ...

  4. C语言调用Intel处理器CPUID指令的实例

    C语言调用Intel处理器CPUID指令的实例 来源 https://blog.csdn.net/subfate/article/details/50789905 在Linux环境下,使用C语言内嵌汇 ...

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

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

  6. BZOJ4946 & 洛谷3826 & UOJ318:[NOI2017]蔬菜——题解

    https://www.lydsy.com/JudgeOnline/problem.php?id=4946 https://www.luogu.org/problemnew/show/P3826 ht ...

  7. 浅谈Hibernate框架(一)——.hbm.xml中的配置

    Hibernate一枚“全自动”的ORM框架: 用IDE工具集成Hibernate会自动生成: 以.hbm.xml为后缀结尾的配置文件+ POJO类 + Dao类 主键查询: Session.load ...

  8. React中的高阶组件,无状态组件,PureComponent

    1. 高阶组件 React中的高阶组件是一个函数,不是一个组件. 函数的入参有一个React组件和一些参数,返回值是一个包装后的React组件.相当于将输入的React组件进行了一些增强.React的 ...

  9. PHP 数据库防止攻击

    定义和用法 mysql_real_escape_string() 函数转义 SQL 语句中使用的字符串中的特殊字符. 下列字符受影响: \x00 \n \r \ ' " \x1a 如果成功, ...

  10. HDU4685:Prince and Princess(二分图匹配+tarjan)

    Prince and Princess Time Limit: 6000/3000 MS (Java/Others)    Memory Limit: 65535/32768 K (Java/Othe ...