ford 超时  使用优先队列的Dijkstra 算法

//#include <cstdio>
//#include <cstring>
//#include <algorithm>
//#define INF 500000000
//using namespace std;
//int a[20010][20010];
//int main()
//{
// int t, ca = 1;
// scanf("%d",&t);
// while(t--)
// {
// int n,m,s,v;
// scanf("%d%d%d%d",&n,&m,&s,&v);
// for(int i = 0; i <= n; i++)
// for(int j = 0; j <= n; j++)
// {
// if(i == j)
// a[i][j] = 0;
// else
// a[i][j] = INF;
// }
// for(int i = 0; i < m; i++)
// {
// int x,y,w;
// scanf("%d%d%d",&x,&y,&w);
// a[x][y] = a[y][x] = w;
// }
// for(int k = 0; k < n; k++)
// for(int i = 0; i < n; i++)
// for(int j = 0; j < n; j++)
// {
// a[i][j] = min(a[i][j], a[i][k]+a[k][j]);
// }
// if(a[s][v] < INF)
// printf("Case #%d: %d\n",ca++,a[s][v]);
// else
// printf("Case #%d: unreachable\n",ca++);
// }
// return 0;
//}
#include <cstdio>
#include <cstring>
#include <queue> #define N 20005
#define M 100005
#define INF 1<<28 struct node
{
int id, dd;
node(int i, int j)
{
id = i;
dd = j;
}
bool operator < (const node &it) const
{
return dd > it.dd;
}
}; int first[M],v[M],w[M],next[M],dis[N],vis[N]; int Dijkstra(int st, int ed, int n)
{
for(int i = 0; i < n; i++)
{
vis[i] = 0;
dis[i] = INF;
}
dis[st] = 0;
std::priority_queue<node> Q;
Q.push(node(st, 0));
while(!Q.empty())
{
node t = Q.top();
Q.pop();
if(vis[t.id]) continue;
if(t.id == ed)
return t.dd;
vis[t.id] = 1;
for(int e = first[t.id]; e != -1; e = next[e])
{
if(dis[v[e]] > dis[t.id] + w[e])
{
dis[v[e]] = dis[t.id] + w[e];
Q.push(node(v[e], dis[v[e]]));
}
}
}
return INF;
} int main()
{
int ca = 1;
int t;
scanf("%d", &t);
while(t--)
{
int n,m,s,d;
scanf("%d%d%d%d", &n, &m, &s, &d);
memset(first, -1, sizeof(first));
int l = 0;
for(int i = 0; i < m; i++)
{
int a,b,c;
scanf("%d%d%d",&a,&b,&c);
next[l] = first[a];
v[l] = b;
w[l] = c;
first[a] = l++;
next[l]=first[b];
v[l] = a;
w[l] = c;
first[b] = l++;
}
int ans = Dijkstra(s, d, n);
printf("Case #%d: ", ca++);
if(ans == INF)
puts("unreachable");
else
printf("%d\n", ans);
}
return 0;
}

uva 10986的更多相关文章

  1. UVA.10986 Fractions Again (经典暴力)

    UVA.10986 Fractions Again (经典暴力) 题意分析 同样只枚举1个,根据条件算出另外一个. 代码总览 #include <iostream> #include &l ...

  2. uva 10986 - Sending email(最短路Dijkstra)

    题目连接:10986 - Sending email 题目大意:给出n,m,s,t,n表示有n个点,m表示有m条边,然后给出m行数据表示m条边,每条边的数据有连接两点的序号以及该边的权值,问说从点s到 ...

  3. UVa 10986 - Sending email

    题目大意:网络中有n个SMTP服务器,有m条电缆将它们相连,每条电缆传输信息需要一定的时间.现在给出信息的起点和终点,计算所需的最小时间. 有权图上的单源最短路问题(Single-Source Sho ...

  4. UVA 10986 Sending email 最短路问题

    基本的最短路问题 就是数据需要稍微处理一下.(N比较大)dijkstra也要优化.不优化应该会T: #include <map> #include <set> #include ...

  5. uva 1354 Mobile Computing ——yhx

    aaarticlea/png;base64,iVBORw0KGgoAAAANSUhEUgAABGcAAANuCAYAAAC7f2QuAAAgAElEQVR4nOy9XUhjWbo3vu72RRgkF5

  6. UVA 10564 Paths through the Hourglass[DP 打印]

    UVA - 10564 Paths through the Hourglass 题意: 要求从第一层走到最下面一层,只能往左下或右下走 问有多少条路径之和刚好等于S? 如果有的话,输出字典序最小的路径 ...

  7. UVA 11404 Palindromic Subsequence[DP LCS 打印]

    UVA - 11404 Palindromic Subsequence 题意:一个字符串,删去0个或多个字符,输出字典序最小且最长的回文字符串 不要求路径区间DP都可以做 然而要字典序最小 倒过来求L ...

  8. UVA&&POJ离散概率与数学期望入门练习[4]

    POJ3869 Headshot 题意:给出左轮手枪的子弹序列,打了一枪没子弹,要使下一枪也没子弹概率最大应该rotate还是shoot 条件概率,|00|/(|00|+|01|)和|0|/n谁大的问 ...

  9. UVA计数方法练习[3]

    UVA - 11538 Chess Queen 题意:n*m放置两个互相攻击的后的方案数 分开讨论行 列 两条对角线 一个求和式 可以化简后计算 // // main.cpp // uva11538 ...

随机推荐

  1. 每天一道LeetCode--118. Pascal's Triangle(杨辉三角)

    Given numRows, generate the first numRows of Pascal's triangle. For example, given numRows = 5,Retur ...

  2. Agile.Net 组件式开发平台 - 组件开发示例

    所谓组件式开发平台,它所有的功能模块都是以组件的形式扩展的,下面我来演示一个简单的组件开发例程. Agile.Net开发管理平台项目,已经托管在开源中国码云平台(http://git.oschina. ...

  3. jQuery概述,代码举例及最新版下载

    jQuery是一个快速的,小巧的,具有强大功能的JavaScript库. 它的基本功能包括: 1)访问和操作DOM元素 2)控制页面样式(可以兼容各种浏览器) 3)对页面事件的处理 4)大量插件在页面 ...

  4. php如何判断是否为json数据(格式)

    首先要记住json_encode返回的是字符串, 而json_decode返回的是对象. 判断数据不是JSON格式:  代码如下 复制代码 function is_not_json($str){    ...

  5. Cocos2d-x开发实例:使用Lambda 表达式

    在Cocos2d-x 3.0之后提供了对C++11标准[1]的支持,其中的Lambda[2]表达式使用起来非常简洁.我们可以使用Lambda表达式重构上一节的实例. 我们可以将下面的代码: liste ...

  6. WebGIS基础复习笔记

    明天要考试了,突击一下. 1.万维网:www是world wide web的简称是在超文本基础上形成的信息网 2.互联网:即广域局域网及单机按照一定的通讯协议组成的国际计算机网络 3.WebGIS:网 ...

  7. C++运用SDK截屏

    引言 最近有一个需要截取当前屏幕,并保存成BMP文件的需求.整个需求,拆分成三步:1.截取屏幕,获得位图数据.2.配合bmp文件结构信息,将数据整合.3.对整合后的数据做操作,如保存在本地.通过网络传 ...

  8. windows phone URI映射

    UriMapping用于在一个较短的URI和你项目中的xaml页的完整路径定义一个映射(别名).通过使用别名URI,开发者可以在不改变导航代码的情况下来改变一个项目的内部结构.该机制还提供了一个简单的 ...

  9. QT设置窗口屏幕居中

    int main(int argc, char *argv[]){  QApplication ap(argc, argv);  QDesktopWidget *pDesk = QApplicatio ...

  10. 把div固定在网页顶部

    很多网站都有把某一块固定在顶部的功能,今天上网搜搜然后自己又写了一遍,贴出来给大家看看,哪天用到的时候自己也可以随时看看 <!DOCTYPE html PUBLIC "-//W3C// ...