畅通工程续(dijskra+SPFA)
畅通工程续
Time Limit : 3000/1000ms (Java/Other) Memory Limit : 32768/32768K (Java/Other)
Total Submission(s) : 67 Accepted Submission(s) : 37
现在,已知起点和终点,请你计算出要从起点到终点,最短需要行走多少距离。
#include<stdio.h>
#include<string.h>
#define MIN(x,y)(x<y?x:y)
const int INF=0x3f3f3f3f;
const int MAXN=;
int d[MAXN];
int N;
int map[MAXN][MAXN],vis[MAXN];
void initial(){
memset(map,INF,sizeof(map));
memset(vis,,sizeof(vis));
memset(d,INF,sizeof(d));
}
void dijskra(int s){
d[s]=;int k;
while(true){
k=-;
for(int i=;i<N;i++)
if(!vis[i]&&(k==-||d[i]<d[k]))k=i;
if(k==-)break;
vis[k]=;
for(int i=;i<N;i++){
d[i]=MIN(d[i],d[k]+map[k][i]);
}
}
}
int main(){
int M,a,b,c,e,s;
while(~scanf("%d%d",&N,&M)){
initial();
while(M--){
scanf("%d%d%d",&a,&b,&c);
if(c<map[a][b]) map[a][b]=map[b][a]=c;
}
scanf("%d%d",&s,&e); dijskra(s);
if(d[e]==0x3f3f3f3f)puts("-1");
else printf("%d\n",d[e]);
}
return ;
}
SPFA:
#include<stdio.h>
#include<string.h>
#include<queue>
using namespace std;
const int INF=0x3f3f3f3f;
const int MAXN=;
const int MAXM=;
int head[MAXM],edgnum;
queue<int >dl;
struct Edge{
int from,to,value,next;
};
Edge edg[MAXM];
int N,M,vis[MAXN],dis[MAXN];
void add(int a,int b,int c){
Edge E={a,b,c,head[a]};
edg[edgnum]=E;
head[a]=edgnum++;
}
void put(){
int a,b,c;
while(M--){
scanf("%d%d%d",&a,&b,&c);
add(a,b,c);
add(b,a,c);
}
}
void initial(){
memset(head,-,sizeof(head));
memset(vis,,sizeof(vis));
memset(dis,INF,sizeof(dis));
while(!dl.empty())dl.pop();
}
void SPFA(int sx,int sy){
vis[sx]=;
dis[sx]=;
dl.push(sx);
while(!dl.empty()){
int k=dl.front();
dl.pop();
vis[k]=;
for(int i=head[k];i!=-;i=edg[i].next){
int v=edg[i].to;
if(dis[k]+edg[i].value<dis[v]){
dis[v]=dis[k]+edg[i].value;
if(!vis[v]){
vis[v]=;
dl.push(v);
}
}
}
}
if(dis[sy]!=INF)printf("%d\n",dis[sy]);
else puts("-1");
}
int main(){
int s,e;
while(~scanf("%d%d",&N,&M)){
initial();
put();
scanf("%d%d",&s,&e);
SPFA(s,e);
}
return ;
}
畅通工程续(dijskra+SPFA)的更多相关文章
- hdu 1874 畅通工程续(SPFA模板)
畅通工程续 Time Limit: 3000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submi ...
- HDU 1874 畅通工程续(最短路/spfa Dijkstra 邻接矩阵+邻接表)
题目链接: 传送门 畅通工程续 Time Limit: 1000MS Memory Limit: 65536K Description 某省自从实行了很多年的畅通工程计划后,终于修建了很多路. ...
- hdoj 1874 畅通工程续【dijkstra算法or spfa算法】
畅通工程续 Time Limit: 3000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submi ...
- hdu 1874 畅通工程续(迪杰斯特拉优先队列,floyd,spfa)
畅通工程续 Time Limit: 3000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Subm ...
- HDU——1874畅通工程续(Dijkstra与SPFA)
畅通工程续 Time Limit: 3000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Submiss ...
- 畅通工程续——E
E. 畅通工程续 某省自从实行了很多年的畅通工程计划后,终于修建了很多路.不过路多了也不好,每次要从一个城镇到另一个城镇时,都有许多种道路方案可以选择,而某些方案要比另一些方案行走的距离要短很多.这让 ...
- HDU——1874畅通工程续(邻接矩阵弗洛伊德)
畅通工程续 Time Limit: 3000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submi ...
- BNUOJ 6023 畅通工程续
畅通工程续 Time Limit: 1000ms Memory Limit: 32768KB This problem will be judged on HDU. Original ID: 1874 ...
- ACM: HDU 1874 畅通工程续-Dijkstra算法
HDU 1874 畅通工程续 Time Limit:1000MS Memory Limit:32768KB 64bit IO Format:%I64d & %I64u Desc ...
随机推荐
- Asp.Net MVC3 简单入门第一季(三)详解Controller之Filter
前言 前面两篇写的比较简单,刚开始写这个系列的时候我面向的对象是刚开始接触Asp.Net MVC的朋友,所以写的尽量简单.所以写的没多少技术含量.把这些技术总结出来,然后一简单的方式让更多的人很好的接 ...
- poj 1742 coins_多重背包
题意:给你N个种硬币,价值和数量,知道手表不大于m,问能组成(1~m)的价格有多少种情况 套套上次那题的模板直接就行了,http://blog.csdn.net/neng18/article/deta ...
- LDA 资料整理
LDA 中文名叫 隐含狄利克雷分布 有一个讲的数学八卦的pdf,如下: http://pan.baidu.com/s/1bnX6Pgb Latent Dirichlet Allocation(LDA) ...
- 【C/C++】Linux下system()函数引发的错误
http://my.oschina.net/renhc/blog/54582 [C/C++]Linux下system()函数引发的错误 恋恋美食 恋恋美食 发布时间: 2012/04/21 11:3 ...
- linux中的strings命令简介
摘自:http://blog.csdn.net/stpeace/article/details/46641069 linux中的strings命令简介 在linux下搞软件开发的朋友, 几乎没有不知道 ...
- 位运算 (&|)与--或 一位数组表示多种意思~~ 与--或
var arr:Array = [0,1,2,4,8,16] var gate:int = 0; gate |= arr[1] gate |= arr[2] gate |= arr[3] trace( ...
- 实用CSS3属性之 :target伪类实现Tab切换效果
CSS3 :target伪类用来改变页面中锚链接URL所指向的ID样式,例如你要改变描链接指向#tab的元素字体颜色为蓝色,哪么你可以这样写成#tab:target {color:blue} 浏览器支 ...
- ZCTF-final-restaurant1
和线上赛的题目差别不大,但是需要自己去泄露堆的地址.除了线上赛的溢出之外,还多了一个Use After Free的洞.我写了两种利用方法. 线上赛writeup见:http://www.cnblogs ...
- Cassandra监控 - OpsCenter手册
注:本文转自:http://eric100.blog.51cto.com/2535573/1717792 Opscenter用户手册 1. OpsCenter简介 DataStaxOpsC ...
- Android学习之Notification
Notification可以在手机的状态栏发出一则通知,它需要用NotificationManager来管理,实现Notification其实很简单. 1.通过getsystemservice方法获得 ...