hdu3790最短路径问题 (用优先队列实现的)
(1<n<=1000, 0<m<100000, s != t)
1 2 5 6
2 3 4 5
1 3
0 0
#include<stdio.h>
#include<iostream>
#include<queue>
using namespace std; typedef struct n1
{
int x,dist,mony;
friend bool operator<(n1 a,n1 b)
{
if(b.dist>a.dist)
return b.dist<a.dist;
else if(b.dist==a.dist&&b.mony>=a.mony)
return b.mony<a.mony;
}
}node;
node map[1005][1005],N[1005];
int s,t,min_dist,min_mony;
int vist[1005][1005];
void set(int n,int m)
{
int i,j,n1,n2,d,p;
for(i=1;i<=n;i++)
{
for(j=1;j<=n;j++)
{
map[i][j].dist=0;vist[i][j]=0;
}
}
while(m--)
{
scanf("%d%d%d%d",&n1,&n2,&d,&p);
if(map[n1][n2].dist==d)
{
if(map[n1][n2].mony>p)
map[n1][n2].mony=map[n2][n1].mony=p;
}
else if(map[n1][n2].dist==0||map[n1][n2].dist>d)
{
map[n1][n2].dist=map[n2][n1].dist=d;
map[n1][n2].mony=map[n2][n1].mony=p;
}
}
scanf("%d%d",&s,&t);
}
void BFS(int n)
{
priority_queue<node> Q;
node q,p;
int i;
q.mony=0; q.dist=0;q.x=t;
Q.push(q);
while(!Q.empty())
{
q=Q.top();
Q.pop();
if(q.x==s)
{
min_dist=q.dist;min_mony=q.mony;
break;
}
for(i=1;i<=n;i++)
if(map[q.x][i].dist&&!vist[q.x][i])
{
vist[q.x][i]=vist[i][q.x]=1;//这样就不会走重复的路
p.dist=map[q.x][i].dist+q.dist;
p.mony=map[q.x][i].mony+q.mony;
p.x=i;//printf("%d %d %d\n",p.x,p.dist,p.mony);
Q.push(p);
}
}
}
int main()
{
int n,m;
while(scanf("%d%d",&n,&m)>0&&(n||m))
{
set(n,m);
BFS(n);
printf("%d %d\n",min_dist,min_mony);
}
}
hdu3790最短路径问题 (用优先队列实现的)的更多相关文章
- hdu3790最短路径问题(BFS+优先队列)
Problem Description 给你n个点,m条无向边,每条边都有长度d和花费p,给你起点s终点t,要求输出起点到终点的最短距离及其花费,如果最短距离有多条路线,则输出花费最少的. Inp ...
- HDU-3790 最短路径问题
最短路径问题 Time Limit : 2000/1000ms (Java/Other) Memory Limit : 32768/32768K (Java/Other) Total Submis ...
- hdu-3790最短路径问题
Problem Description 给你n个点,m条无向边,每条边都有长度d和花费p,给你起点s终点t,要求输出起点到终点的最短距离及其花费,如果最短距离有多条路线,则输出花费最少的. Inp ...
- HDU-3790最短路径问题,第十遍终于过了~
最短路径问题 Time Limit: 2000/1000 MS (J ...
- hdu3790最短路径问题
题意是这种,给你一个无向图, 每条边有距离和花费, 假设从第一个点到末点的最短路不唯一, 则输出最短路长度以及最少的花费. 否则输出长度和花费即可. 用传说中的链式向前星优化了一下边的存储, 写了个s ...
- hdu-3790 最短路径问题(双重权值)
Problem Description 给你n个点,m条无向边,每条边都有长度d和花费p,给你起点s终点t,要求输出起点到终点的最短距离及其花费,如果最短距离有多条路线,则输出花费最少的. Input ...
- HDU-3790 最短路径问题(双重权值)
Problem Description 给你n个点,m条无向边,每条边都有长度d和花费p,给你起点s终点t,要求输出起点到终点的最短距离及其花费,如果最短距离有多条路线,则输出花费最少的. Inp ...
- hdu-3790 最短路径问题---dijkstra两重权值
题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=3790 题目大意: 给你n个点,m条无向边,每条边都有长度d和花费p,给你起点s终点t,要求输出起点到 ...
- 最短路径-Dijkstra+Floyd+Spfa
Dijkstra算法: Dijkstra(迪杰斯特拉)算法是典型的单源最短路径算法,用于计算一个节点到其他所有节点的最短路径.主要特点是以起始点为中心向外层层扩展,直到扩展到终点为止.Dijkstra ...
随机推荐
- UpdatePanel和jQuery不兼容
在做项目中发现,在使用了UpdatePanel的地方,局部刷新后,jquery失效了. 后来网上一查,才发现,jquery中的ready事件会在DOM完全加载后运行一次,而当我们实用了UpdatePa ...
- 基于visual Studio2013解决面试题之1207堆排序
题目
- 基于visual Studio2013解决面试题之0907大数乘法
题目
- guava之Joiner 和 Splitter(转)
最近在给客户准备一个Guava的分享,所以会陆续的更新关于Guava更多的细节分享.本文将记录Guava中得字符串处理Joiner(连接)和Splitter(分割)处理. Joiner 首先我们来看看 ...
- Let’s do this!新手程序员的入门指南(转)
计算机科学(Computer Science)无疑是现在最热门的学科之一,这领域的工作薪水高.工作时间弹性,而且科技业对工程师.开发者的需求至今有增无减,科技龙头们随时虎视眈眈着出色的程式开发者.创意 ...
- python datetime模块strptime/strptime format常见格式命令_施罗德_新浪博客
python datetime模块strptime/strptime format常见格式命令_施罗德_新浪博客 python datetime模块strptime/strptime form ...
- 用js制作的几个效果
一,表格光柱效果(奇偶行不同颜色,鼠标移上变色) <html xmlns="http://www.w3.org/1999/xhtml"><head>< ...
- 使用JDBC调用数据库的存储过程
本篇讲述如何使用JDBC来调用MySQL数据库中的存储过程.建议在学习如何使用JDBC调用存储过程前,请先了解如何在数据库中使用存储过程. 存储过程是指在数据库系统中,一组为了完成特定功能的SQL语句 ...
- [置顶] Jsp中的table多表头导出excel文件
首先引入两份JS:copyhtmltoexcel.js以及 tableToExcel.js /* * 默认转换实现函数,如果需要其他功能,需自行扩展 * 参数: * tableID : HTML中Ta ...
- uva 140
思路:暴力+剪枝 uva140 wa了好多次……数组开小了……!!! #include <iostream> #include <cstdio> #include <cm ...