题目链接 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. ssl加密

    握手前使用非对称加密, 握手后使用对称加密 前期握手就是用来协商对称加密算法的

  2. LeetCode 148 Sort List 链表上的归并排序和快速排序

    Sort a linked list in O(n log n) time using constant space complexity. 单链表排序----快排 & 归并排序 (1)归并排 ...

  3. onCreateOptionsMenu

    onCreateOptionsMenu----只在Activity创建时调用一次!之后不会再被调用! onPrepareOptionsMenu----每次display menu之前,都會调用该方法, ...

  4. ubuntu apache2 https

    1. enable the module ssl by: sudo a2enmod ssl 2.after you have enabled module ssl , you will have to ...

  5. B - Reverse and Compare 小小思维题

    http://agc019.contest.atcoder.jp/tasks/agc019_b 一开始的做法是, 用总数减去回文子串数目,因为回文子串怎么翻转都不影响答案. 然后,如果翻转afucka ...

  6. JavaScript 浮点数处理

    众所周知,JavaScript 浮点数运算时经常遇到会 0.000000001 和 0.999999999 这样奇怪的结果,如 0.1+0.2=0.30000000000000004.1-0.9=0. ...

  7. 你一直在用的 Spring Boot Starters 究竟是怎么回事

    Spring Boot 对比 Spring MVC 最大的优点就是使用简单,约定大于配置.不会像之前用 Spring MVC 的时候,时不时被 xml 配置文件搞的晕头转向,冷不防还因为 xml 配置 ...

  8. hibernate课程 初探单表映射1-4 hibernate开发前准备

    开发前准备: 1 eclipse 2 hibernate tools的安装(需要相关的jar包)(可以简化orm框架) hibernate tools的安装步骤: 1 到官网下载 https://so ...

  9. 50道CSS基础面试题(附答案)

    1 介绍一下标准的CSS的盒子模型?与低版本IE的盒子模型有什么不同的? 标准盒子模型:宽度=内容的宽度(content)+ border + padding + margin低版本IE盒子模型:宽度 ...

  10. sql server 2012安装程序图

    重点:下面的安装步骤都在断网环境下安装的 因为我想查看联网跟没有联网SQL2012会不会下载并安装.net2.0 和.net3.5和.net4和SP1补丁包 我的环境: 没有集成SP1补丁包的安装包大 ...