HDU 1874(简单最短路) (大优化)
优先队列那里用greater会报错
http://acm.hdu.edu.cn/showproblem.php?pid=1874
/*
使用pair代替结构
*/ #include <iostream>
#include <cstdio>
#include <queue>
#include <vector>
using namespace std;
const int Ni = ;
const int INF = <<; typedef pair<int,int> pa; int dis[Ni],n;//dis使用1-n的部分 vector<pair<int,int> > eg[Ni]; void Dijkstra(int s)
{
int i,j;
for(i=;i<=n;i++)//要到n
dis[i] = INF;
priority_queue<pa> q; //优先级队列:小顶堆
dis[s] = ;
q.push(make_pair(s,dis[s])); while(!q.empty())
{
pa x = q.top();
q.pop();
int w = x.first;
for(j = ;j<eg[w].size();j++)//遍历x的所有邻接点
{
pa y = eg[w][j];//y是x的邻接点
int u = y.first;
if(dis[u]>x.second+y.second)
{
dis[u] = x.second+y.second;
q.push(make_pair(u,dis[u]));
}
}
} } int main()
{
int m,a,b,d;//关系个数
while(cin>>n>>m)
{
for(int i = ;i<=n;i++)
eg[i].clear();//初始化
while(m--)
{
cin>>a>>b>>d;
eg[a].push_back(make_pair(b,d));
eg[b].push_back(make_pair(a,d));
} int o,p;
cin>>o>>p;
Dijkstra(o);
if(dis[p]!=INF)
cout<<dis[p]<<endl;
else
cout<<"-1\n";
} return ;
}
/*
6 6
1 2 2
3 2 4
1 4 5
2 5 2
3 6 3
5 6 3
*/
上面那种方法在ACM里实在太慢了(46MS),用C的话效率急速提升,达到了0MS。。
#include <cstdio>
using namespace std;
const int L = ;
const int INF = <<; int map[L][L];
int vis[L];
int dis[L]; int n,m; void Dijkstra(int s)
{
int i,j,k;
int min;
for(i = ;i<n;i++)
{
dis[i] = map[s][i];
vis[i] = ;
} vis[s] = ;
dis[s] = ; for(i = ;i<n;i++)
{
min = INF;
for(j = ;j<n;j++)
{
if(dis[j]<min && !vis[j])
{
k = j;
min = dis[j];
}
} vis[k] = ; for(j = ;j<n;j++)
{
if(dis[j] > min+map[k][j] && !vis[j])
{
dis[j] = min+map[k][j];
}
}
}
} void init()
{
int i,j;
for(i = ;i<n;i++)
{
map[i][i] = ;
for(j = i+;j<n;j++)
{
map[i][j] = map[j][i] = INF;
}
} while(m--)
{
int a,b,w;
scanf("%d%d%d",&a,&b,&w);
if(w<map[a][b])//可能有同两点,但不同weight
{
map[a][b] = w;
map[b][a] = w;
}
}
} int main()
{
while(~scanf("%d%d",&n,&m))
{
int r,t; init(); scanf("%d%d",&r,&t); Dijkstra(r); if(dis[t]!=INF)
printf("%d\n",dis[t]);
else
printf("-1\n"); } return ;
}
HDU 1874(简单最短路) (大优化)的更多相关文章
- hdu2112(HDU Today 简单最短路)
Problem Description 经过锦囊相助,海东集团终于度过了危机,从此,HDU的发展就一直顺风顺水,到了2050年,集团已经相当规模了,据说进入了钱江肉丝经济开发区500强.这时候,XHD ...
- hdu 4576(简单概率dp | 矩阵优化)
艰难的一道题,体现出菜菜的我... 首先,先吐槽下. 这题到底出题人是怎么想的,用普通概率dp水过??? 那为什么我概率dp写的稍微烂点就一直tle? 感觉很不公平.大家算法都一致,因为我程序没有那 ...
- HDOJ(HDU).2191. 悼念512汶川大地震遇难同胞――珍惜现在,感恩生活 (DP 多重背包+二进制优化)
HDOJ(HDU).2191. 悼念512汶川大地震遇难同胞――珍惜现在,感恩生活 (DP 多重背包+二进制优化) 题意分析 首先C表示测试数据的组数,然后给出经费的金额和大米的种类.接着是每袋大米的 ...
- (重刷)HDU 1874 畅通工程续 + HDU 2544 最短路 最短路水题,dijkstra解法。
floyd解法 今天初看dijkstra,先拿这两题练手,其他变形题还是不是很懂. 模版题,纯练打字... HDU 1874: #include <cstdio> #define MAXN ...
- hdu 2544 hdu 1874 poj 2387 Dijkstra 模板题
hdu 2544 求点1到点n的最短路 无向图 Sample Input2 1 //结点数 边数1 2 3 //u v w3 31 2 52 3 53 1 20 0 Sample Output32 ...
- poj 3463/hdu 1688 求次短路和最短路个数
http://poj.org/problem?id=3463 http://acm.hdu.edu.cn/showproblem.php?pid=1688 求出最短路的条数比最短路大1的次短路的条数和 ...
- HDU 2829 区间DP & 前缀和优化 & 四边形不等式优化
HDU 2829 区间DP & 前缀和优化 & 四边形不等式优化 n个节点n-1条线性边,炸掉M条边也就是分为m+1个区间 问你各个区间的总策略值最少的炸法 就题目本身而言,中规中矩的 ...
- HDU 1874 畅通工程续-- Dijkstra算法详解 单源点最短路问题
参考 此题Dijkstra算法,一次AC.这个算法时间复杂度O(n2)附上该算法的演示图(来自维基百科): 附上: 迪科斯彻算法分解(优酷) problem link -> HDU 1874 ...
- 10种简单的Java性能优化
你是否正打算优化hashCode()方法?是否想要绕开正则表达式?Lukas Eder介绍了很多简单方便的性能优化小贴士以及扩展程序性能的技巧. 最近“全网域(Web Scale)”一词被炒得火热,人 ...
随机推荐
- leetcode-896-单调数列
题目描述: 如果数组是单调递增或单调递减的,那么它是单调的. 如果对于所有 i <= j,A[i] <= A[j],那么数组 A 是单调递增的. 如果对于所有 i <= j,A[i] ...
- QuantLib 金融计算——数学工具之数值积分
目录 QuantLib 金融计算--数学工具之数值积分 概述 常见积分方法 高斯积分 如果未做特别说明,文中的程序都是 Python3 代码. QuantLib 金融计算--数学工具之数值积分 载入模 ...
- BiliBili, ACFun… And More!【递归算法】
题源:http://acm.uestc.edu.cn/#/problem/show/3 题解: 题意:播放一段视频文件,有播放速度和缓冲速度两种,因为作者的癖好,播放前要缓冲几秒钟(这段时间不计算在总 ...
- git 远程库和url
我们使用 git remote add origin <url> 来关联远程主机,这个origin就是关联的远程主机名,如果我们想同时关联两个远程主机,我们可以用 git remote a ...
- github上关于campbell数据采集的一些代码。
数据自动采集: https://github.com/USGS-OWI/deployer-campbell program that reads loggernet files and refor ...
- Eigenface与PCA人脸识别算法实验
简单的特征脸识别实验 实现特征脸的过程其实就是主成分分析(Principal Component Analysis,PCA)的一个过程.关于PCA的原理问题,它是一种数学降维的方法.是为了简化问题.在 ...
- 介绍&代码
之前参考前辈实现的分页组件,还ok. 介绍: 基于Web,实现分页样式 和 控制页面内容数据的展示形式. 实现: from django.utils.safestring import mark_sa ...
- mysql使用常见问题
常见问题之一: 启动mysql时显示: The server quit without updating PID file 1.可能是/usr/local/mysql/data/mysql.pid文件 ...
- ContentProvider和Cursor以及CursorAdapter三者之间内部链接实现原理 解析
最近 在学习Android3.0中推出的 Loader 机制,其中CursorLoader 这个加载器说是可以实时监测数据和更新数据,为了一探究竟,就连带的将 ContentProvider和Curs ...
- Cassandra概念学习系列之Cassandra是什么?
不多说,直接上干货! http://cassandra.apache.org/ Apache Cassandra是一套开源分布式NoSQL数据库系统.它最初由Facebook开发,用于储存收件箱等简单 ...