题目链接 http://codeforces.com/contest/954/problem/D

题目大意

n m s t 分别为点的个数, 边的个数,以及两个特殊的点

要求s与t间的距离在新增一条边下不变

基本思路

用dj算法由s 到 t两个点分别进行一次计算

得出每个点到s与t的最短值

遍历计算每两个没建立联系的边建立联系后,s与t的距离,并与初始时距离比较

若不变则记录(s与t的值必定为新建经由新建这条边的数值或原始值中最小一个)

#include <stdio.h>
#include <algorithm>
#include <queue>
#include <bitset>
#include <memory.h>
#define MS 1010
#define END 0x3f3f3f3f
using namespace std; int a[MS][MS]; //閭绘帴琛? priority_queue <int> q;
void dijsktra(int start, int N, int d[MS]){
int i, j;
bool v[MS];
memset(v, 0, sizeof(v));
d[start] = 0; for(i = 1; i < N; i++){
int x = 0;
for(j = 1; j <= N; j++)
if(!v[j] && (x == 0|| d[j] < d[x])) x = j;
v[x] = 1; /* printf("%d\n", x);*/
for(j = 1; j <= N; j++){
d[j] = min(d[j], d[x]+a[x][j]);
/* printf("%d %d\n", d[x], a[x][j]);*/
}
}
}
int main(){
int N, M, S, T;
int temp_x, temp_y;
while(scanf("%d%d%d%d", &N, &M, &S, &T) == 4){
//init
int i, j;
memset(a, 0x3f, sizeof(a));
for(i = 0; i <= N; i++) a[i][i] = 0;
for(i = 0; i < M; i++){
scanf("%d%d", &temp_x, &temp_y);
a[temp_x][temp_y] = 1;
a[temp_y][temp_x] = 1;
}
/* for(i = 1; i <= N; i++){
for(j = 1; j <= N; j++){
if(a[i][j] > 10)
printf("* ");
else
printf("%d ", a[i][j]);
}
printf("\n");
}*/
int dt[MS], ds[MS];
memset(ds, 0x3f, sizeof(ds));
memset(dt, 0x3f, sizeof(dt));
dijsktra(T, N, dt);
dijsktra(S, N, ds);
int length = ds[T];
/* for(i = 0; i <= N; i++) printf("%d ", dt[i]);
printf("\n");
printf("%d\n", length);*/
int count = 0;
for(i = 1; i <= N; i++){
for(j = i+1; j <= N; j++){
if(a[i][j] == 1) continue;
if(ds[i]+dt[j]+1 >= length && ds[j] + dt[i] +1 >= length){
/*printf("%d %d %d %d\n", i, j, ds[i]+dt[j]+1, ds[j]+dt[i]+1);*/
count++;
}
}
}
printf("%d\n", count); /* for(i = 1; i <= N; i++)
printf("%d ", d[i]);
printf("\n");*/
}
}

Fight Against Traffic -简单dijkstra算法使用的更多相关文章

  1. 图论基础之Dijkstra算法的初探

         图论,顾名思义就是有图有论.        图:由点"Vertex"和边"Edge "组成,且图分为有向图和无向图(本文讨论有向图),之前做毕业设计的 ...

  2. 算法笔记_068:Dijkstra算法简单介绍(Java)

    目录 1 问题描述 2 解决方案 2.1 使用Dijkstra算法得到最短距离示例 2.2 具体编码   1 问题描述 何为Dijkstra算法? Dijkstra算法功能:给出加权连通图中一个顶点, ...

  3. Dijkstra算法简单实现(C++)

    图的最短路径问题主要包括三种算法: (1)Dijkstra (没有负权边的单源最短路径) (2)Floyed (多源最短路径) (3)Bellman (含有负权边的单源最短路径) 本文主要讲使用C++ ...

  4. 最短路模板(Dijkstra & Dijkstra算法+堆优化 & bellman_ford & 单源最短路SPFA)

    关于几个的区别和联系:http://www.cnblogs.com/zswbky/p/5432353.html d.每组的第一行是三个整数T,S和D,表示有T条路,和草儿家相邻的城市的有S个(草儿家到 ...

  5. 单源最短路径——Dijkstra算法学习

    每次都以为自己理解了Dijkstra这个算法,但是过没多久又忘记了,这应该是第4.5次重温这个算法了. 这次是看的胡鹏的<地理信息系统>,看完之后突然意识到用数学公式表示算法流程是如此的好 ...

  6. [图论]Dijkstra 算法小结

    Dijkstra 算法小结  By Wine93 2013.11 1. Dijkstra 算法相关介绍 算法阐述:Dijkstra是解决单源最短路径的算法,它可以在O(n^2)内计算出源点(s)到图中 ...

  7. 单源最短路径——dijkstra算法

    dijkstra算法与prim算法的区别   1.先说说prim算法的思想: 众所周知,prim算法是一个最小生成树算法,它运用的是贪心原理(在这里不再证明),设置两个点集合,一个集合为要求的生成树的 ...

  8. 图论(四)------非负权有向图的单源最短路径问题,Dijkstra算法

    Dijkstra算法解决了有向图G=(V,E)上带权的单源最短路径问题,但要求所有边的权值非负. Dijkstra算法是贪婪算法的一个很好的例子.设置一顶点集合S,从源点s到集合中的顶点的最终最短路径 ...

  9. 单源最短路径—Bellman-Ford和Dijkstra算法

    Bellman-Ford算法:通过对边进行松弛操作来渐近地降低从源结点s到每个结点v的最短路径的估计值v.d,直到该估计值与实际的最短路径权重相同时为止.该算法主要是基于下面的定理: 设G=(V,E) ...

随机推荐

  1. Mysql遍历大表(Mysql大量数据读取内存溢出的解决方法)

    mysql jdbc默认把select的所有结果全部取回,放到内存中,如果是要遍历很大的表,则可能把内存撑爆. 一种办法是:用limit,offset,但这样你会发现取数据的越来越慢,原因是设置了of ...

  2. Selenium----Selenium WebDriver /RC工作原理

    1.Selenium RC 工作原理 说明:客户端库文件将命令传递给server.接着server使用selenium-core的javaScript命令传递给浏览器,浏览器会使用自带的javaScr ...

  3. 【ACM】拦截导弹 - 0-1背包问题

    拦截导弹 时间限制:3000 ms  |  内存限制:65535 KB 难度:3   描述 某国为了防御敌国的导弹袭击,发展中一种导弹拦截系统.但是这种导弹拦截系统有一个缺陷:虽然它的第一发炮弹能够到 ...

  4. 关于String的split方法

    在做剑指offer的时候,有一道替换空格的题,立刻就想到用这个split方法来做,但发现,这个方法会丢掉字符串最后的空格??? 百度后,知道原因,这里直接复制粘贴了: 在使用java中的split按照 ...

  5. HDU 5773 The All-purpose Zero 脑洞LIS

    给定一个序列,里面的0是可以任变的.问变化后最长的LIS的长度 首先,0全部选上是不亏的.这个不知道怎么说,YY一下吧. 最关键的就是解决2 0 0 3 这种问题了. 注意到这个序列的LIS应该是3 ...

  6. 最简实例演示asp.net5中用户认证和授权(1)

    asp.net5中,关于用户的认证和授权提供了非常丰富的功能,如果结合ef7的话,可以自动生成相关的数据库表,调用也很方便. 但是,要理解这么一大堆关于认证授权的类,或者想按照自己项目的特定要求对认证 ...

  7. @property的4类修饰符

    一.读写性修饰符:readwrite | readonly readwrite:表明这个属性是可读可写的,系统为我们创建这个属性的setter和getter方法. readonly:表明这个属性只能读 ...

  8. Linux软件相关记录

    Pidgin+lw-web的聊天记录的文件对应的目录为.purple/logs/webqq/你的QQ号码/,进入之后有选择的删除. mkdir -p 递归创建目录:pwd 显示当前目录:cd .. 回 ...

  9. springmvc之Hello World及常用注解

    步骤: 加入jar包 在web.xml 中配置DispacherServlet 加入SpringMVC 配置文件springmvc.xml 编写请求处理器(action/controller) 编写视 ...

  10. java8Stream map和flatmap的区别

    map和flatmap的区别 map只是一维 1对1 的映射 而flatmap可以将一个2维的集合映射成一个一维,相当于他映射的深度比map深了一层 , 所以名称上就把map加了个flat 叫flat ...