VIJOS-P1446 最短路上的统计
JDOJ 1523: VIJOS-P1446 最短路上的统计
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 最短路上的统计的更多相关文章
- Crowd Control(输出不在最大值最小化的最短路上的边)
题意: 就是求完最大值最小化 然后输出在这条最大值最小化的最短路上的点的不在最短路上的边,emm.... 解析: 很明显,先套spfa最大值最小化模板,emm... 在更新d的时候 用一个pre去记 ...
- hdu3986 spfa + 枚举最短路上的边
题意: 删除一条边后,求最短路中最长的那个(敌人搞破坏). 思路: 如果你是敌人你肯定删除最短路上的边,删除别的边最短路的值是不会变的,所以直接枚举最短路上的边去删除,取得最大的就行了... #inc ...
- vijos - P1122出栈序列统计 (卡特兰数)
P1122出栈序列统计 未递交 标签:NOIP普及组2003[显示标签] 描写叙述 栈是经常使用的一种数据结构,有n令元素在栈顶端一側等待进栈,栈顶端还有一側是出栈序列. 你已经知道栈的操作有两·种: ...
- 有关最短路上的第k小/大值的总结
1.USACO08JAN Telephone Lines 题面 由于问的是最大值最小,所以二分加验证就好了 比较显然的,题干问的是第k+1长的路最短: 那么二分答案是正确的方向: 但是怎么验证? 我 ...
- (poj 2253) Frogger 最短路上的最大路段
题目链接:http://poj.org/problem?id=2253 Description Freddy Frog is sitting on a stone in the middle of a ...
- Graph Theory の brief introduction
一. 图的概念 1.定义 某类具体事物(顶点)和这些事物之间的联系(边),由顶点(vertex)和边(edge)组成, 顶点的集合V,边的集合E,图记为G = (V,E) 2.分类 1 ...
- 201800624模拟赛T2——回家路上
题目描述 很多学生都抱怨浪费在回家路上的时间太长.这天dongdong刚走出学校大门,就听说某段路在施工(但不知道是哪条路),有可能导致他回家的时间会变长. Dongdong给出了一张地图,图中标号为 ...
- BZOJ1975[Sdoi2010]魔法猪学院——可持久化可并堆+最短路树
题目描述 iPig在假期来到了传说中的魔法猪学院,开始为期两个月的魔法猪训练.经过了一周理论知识和一周基本魔法的学习之后,iPig对猪世界的世界本原有了很多的了解:众所周知,世界是由元素构成的:元素与 ...
- [Codeforces 1005F]Berland and the Shortest Paths(最短路树+dfs)
[Codeforces 1005F]Berland and the Shortest Paths(最短路树+dfs) 题面 题意:给你一个无向图,1为起点,求生成树让起点到其他个点的距离最小,距离最小 ...
随机推荐
- Cobalt环境搭建及 Web开发注意事项
一.在Linux系统上搭建Cobalt运行环境 Cobalt是一款开源轻量级HTML5/CSS/JS浏览器,旨在于用最少的CPU.GPU.RAM等资源消耗提供丰富的应用程序开发.为了使前端开发者验证自 ...
- SQLAlchemy基础
1.介绍 做个简单笔记,方便回顾. SQLAlchemy是一个基于Python实现的ORM框架.该框架建立在 DB API之上,使用关系对象映射进行数据库操作,简言之便是:将类和对象转换成SQL,然后 ...
- go-gin-api 路由中间件 - Jaeger 链路追踪
概述 首先同步下项目概况: 上篇文章分享了,路由中间件 - Jaeger 链路追踪(理论篇). 这篇文章咱们分享:路由中间件 - Jaeger 链路追踪(实战篇). 说实话,这篇文章确实让大家久等了, ...
- 关于i7 8700以上系列主机,安装虚拟机Win7下连接U盘,故障处理的补充说明
正如前文“虚拟机下怎么连接U盘,如何使用U盘?一策书(湘岳阳万江波)的随笔”所言,我在win10下的虚拟机win7(i7 9700),而且听说了是不支持Win7的,其原因是不支持USB的驱动问题. 我 ...
- 元类理解与元类编程 《Python3网络爬虫开发》中第九章代理的使用代码Crawler中代码的理解
__new__与__init__的理解 __new__()方法是在创建实例之前被调用的,它的作用是创建一个实例,然后返回该实例对象,它是一个静态方法. __init__() 当实例被创建完成之后被调用 ...
- 【BZOJ4944】[NOI2017]泳池(线性常系数齐次递推,动态规划)
[BZOJ4944][NOI2017]泳池(线性常系数齐次递推,动态规划) 首先恰好为\(k\)很不好算,变为至少或者至多计算然后考虑容斥. 如果是至少的话,我们依然很难处理最大面积这个东西.所以考虑 ...
- 前端学习:学习笔记(CSS部分)
前端学习:学习笔记(CSS部分) CSS的学习总结(图解) CSS的引入方式和书写规范 CSS的插入方式_内嵌样式 <!DOCTYPE html> <html> <hea ...
- python 练习题:将列表中的大写字母转换成小写
将列表中的大写字母转换成小写如果list中既包含字符串,又包含整数,由于非字符串类型没有lower()方法,L1 = ['Hello', 'World', 18, 'Apple', None]请修改列 ...
- C#获取剪切板的内容
// GetDataObject获取当前剪贴板上的数据 IDataObject data = Clipboard.GetDataObject(); // 将数据与指定的格式进行匹配,返回bool if ...
- C#/.Net操作MongoDBHelper类
先 NuGet两个程序集 1:MongoDB.Driver. 2:MongoDB.Bson namespace ConsoleApp1{ /// <summary> /// Mongo ...