JDOJ 1523: VIJOS-P1446 最短路上的统计

JDOJ传送门

Description

一个无向图上,没有自环,所有边的权值均为1,对于一个点对(a,b),我们要把所有a与b之间所有最短路上的点的总个数输出。

Input

第一行n,m,表示n个点,m条边 接下来m行,每行两个数a,b,表示a,b之间有条边 在下来一个数p,表示问题的个数 接下来p行,每行两个数a,b,表示询问a,b

Output

对于每个询问,输出一个数c,表示a,b之间最短路上点的总个数

Sample Input

5 6 1 2 1 3 2 3 2 4 3 5 4 5 3 2 5 5 1 2 4

Sample Output

4 3 2

HINT

范围:n< =100,p< =5000

题解:

一看是任意两点之间的最短路,并且n<=100。那么就可以果断地用Floyd算法了。

如果还没有学习Floyd算法,请移步至我的最短路算法的讲解。

最短路算法讲解

那么现在不是简单地让我们求任意两点最短路,而是要我们统计最短路点的个数。

这样的话怎么处理呢?

先跑最短路,然后我们继续用Floyd思想,枚举断点,如果这个端点在最短路上,那么一定有:这个点到最短路两个端点的距离和等于这个最短路的长度。

真相大白。

代码如下:

#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
int n,m,p,ans;
int map[110][110];
int main()
{
scanf("%d%d",&n,&m);
memset(map,0x3f,sizeof(map));
for(int i=1;i<=n;i++)
map[i][i]=0;
for(int i=1;i<=m;i++)
{
int x,y;
scanf("%d%d",&x,&y);
map[x][y]=map[y][x]=1;
}
for(int k=1;k<=n;k++)
for(int i=1;i<=n;i++)
for(int j=1;j<=n;j++)
map[i][j]=min(map[i][k]+map[k][j],map[i][j]);
scanf("%d",&p);
while(p--)
{
ans=0;
int a,b;
scanf("%d%d",&a,&b);
for(int k=1;k<=n;k++)
if(map[a][k]+map[k][b]==map[a][b] || map[b][k]+map[k][a]==map[a][b])
ans++;
printf("%d\n",ans);
}
return 0;
}

VIJOS-P1446 最短路上的统计的更多相关文章

  1. Crowd Control(输出不在最大值最小化的最短路上的边)

    题意: 就是求完最大值最小化  然后输出在这条最大值最小化的最短路上的点的不在最短路上的边,emm.... 解析: 很明显,先套spfa最大值最小化模板,emm... 在更新d的时候 用一个pre去记 ...

  2. hdu3986 spfa + 枚举最短路上的边

    题意: 删除一条边后,求最短路中最长的那个(敌人搞破坏). 思路: 如果你是敌人你肯定删除最短路上的边,删除别的边最短路的值是不会变的,所以直接枚举最短路上的边去删除,取得最大的就行了... #inc ...

  3. vijos - P1122出栈序列统计 (卡特兰数)

    P1122出栈序列统计 未递交 标签:NOIP普及组2003[显示标签] 描写叙述 栈是经常使用的一种数据结构,有n令元素在栈顶端一側等待进栈,栈顶端还有一側是出栈序列. 你已经知道栈的操作有两·种: ...

  4. 有关最短路上的第k小/大值的总结

    1.USACO08JAN  Telephone Lines 题面 由于问的是最大值最小,所以二分加验证就好了 比较显然的,题干问的是第k+1长的路最短: 那么二分答案是正确的方向: 但是怎么验证? 我 ...

  5. (poj 2253) Frogger 最短路上的最大路段

    题目链接:http://poj.org/problem?id=2253 Description Freddy Frog is sitting on a stone in the middle of a ...

  6. Graph Theory の brief introduction

    一. 图的概念   1.定义   某类具体事物(顶点)和这些事物之间的联系(边),由顶点(vertex)和边(edge)组成, 顶点的集合V,边的集合E,图记为G = (V,E) 2.分类     1 ...

  7. 201800624模拟赛T2——回家路上

    题目描述 很多学生都抱怨浪费在回家路上的时间太长.这天dongdong刚走出学校大门,就听说某段路在施工(但不知道是哪条路),有可能导致他回家的时间会变长. Dongdong给出了一张地图,图中标号为 ...

  8. BZOJ1975[Sdoi2010]魔法猪学院——可持久化可并堆+最短路树

    题目描述 iPig在假期来到了传说中的魔法猪学院,开始为期两个月的魔法猪训练.经过了一周理论知识和一周基本魔法的学习之后,iPig对猪世界的世界本原有了很多的了解:众所周知,世界是由元素构成的:元素与 ...

  9. [Codeforces 1005F]Berland and the Shortest Paths(最短路树+dfs)

    [Codeforces 1005F]Berland and the Shortest Paths(最短路树+dfs) 题面 题意:给你一个无向图,1为起点,求生成树让起点到其他个点的距离最小,距离最小 ...

随机推荐

  1. 黑客最喜欢的15个Nmap扫描命令,熟练掌握你也能成为黑客大神

    1.针对IP或主机的基本Nmap扫描 nmap IP 现在,如果要扫描主机名,只需替换主机的IP,如下所示: nmap 域名 2.扫描本地或远程服务器上的特定端口或扫描整个端口范围 nmap -p 1 ...

  2. K8s 集群安装(一)

    01,集群环境 三个节点   master node1 node2 IP 192.168.0.81 192.168.0.82 192.168.0.83 环境 centos 7 centos 7 cen ...

  3. GreenPlum 大数据平台--segment 失效问题恢复《二》(全部segment宕机情况下)

    01,情况描述 主Segment和它的镜像都宕掉.导致了greenplum数据库不可用状态 02,重启greenplum数据库 gpstop -r 03,恢复 gprecoverseg 04,状态检查 ...

  4. swagger案例Swagger案例

    pom <modelVersion>4.0.0</modelVersion> <parent> <groupId>org.springframework ...

  5. centos下java环境搭建安装

    1. 购买服务器(阿里云) 2. 重置密码,重启服务器 3. 创建账号work groupadd work #创建组 mkdir /data # 创建数据文件夹 useradd -d /data/wo ...

  6. sql server获取格式化的当前日期

    在SQL Server中获取格式化成yyyy-MM-dd的当前日期: ), ); -- 2019-06-17 首先我们知道getdate()函数是用来获取当前日期的,它返回的类型是datetime类型 ...

  7. axios解决跨域问题

    最近把我自己的网站升级生成前后端分离的项目(vue+springBoot),不可避免的就遇到了跨域问题.从中学到了许多知识,随便分享出来,也巩固下所学. 谈到跨域,首先得了解CORS(Cross or ...

  8. Python学习笔记之使用 python -m SimpleHTTPServer 快速搭建http服务

    0x00 概述 搭建FTP,或者是搭建网络文件系统,这些方法都能够实现Linux的目录共享.但是FTP和网络文件系统的功能都过于强大,因此它们都有一些不够方便的地方.比如你想快速共享Linux系统的某 ...

  9. 一个类搞定SQL条件映射解析,实现轻量简单实用ORM功能

    个人觉得轻简级的ORM既要支持强类型编码,又要有执行效率,还要通俗易懂给开发者友好提示,结合Expression可轻松定制自己所需要功能. Orm成品开源项目地址https://github.com/ ...

  10. SharpImage图像特效和合成类库介绍

    SharpImage是用于.NET(C#.VB)的专业图像特效以及图像合成类库.借助它,您可以快速实现Photoshop滤镜效果以及图层合成. 1.内置50+种图像特效滤镜.(如亮度.对比度.负片.图 ...