洛谷——P3906 Geodetic集合
P3906 Geodetic集合
题目描述
图G是一个无向连通图,没有自环,并且两点之间至多只有一条边。我们定义顶点v,u最短路径就是从v到u经过边最少的路径。所有包含在v-u的最短路径上的顶点被称为v-u的Geodetic顶点,这些顶点的集合记作I(v, u)。
我们称集合I(v, u)为一个Geodetic集合。
例如下图中,I(2, 5)={2, 3, 4, 5},I(1, 5)={1, 3, 5},I(2, 4)={2, 4}。

给定一个图G和若干点对v,u,请你分别求出I(v, u)。
输入输出格式
输入格式:
输入文件geo.in,第一行为两个整数n,m,分别表示图G的顶点数和边数(顶点编号1-n,n≤40)。下接m行,每行两个整数a,b表示顶点a和b之间有一条无向边。
第m+2行有一个整数k,表示给定的点对数。下接k行,每行两个整数v,u。。
输出格式:
输出文件geo.out,共k行,每行对应输入文件中每一个点对v,u,按顶点编号升序输出I(v, u)。同一行的每个数之间用空格分隔。
输入输出样例
解题报告:
题目大意:给你一个无向连通图,询问两点之间最短路径上的点
spfa 跑最短路,记录到达每个节点最短路径上的的前驱即可,不过前驱可能有好几个,vector<int>G[N]存储即可
此题有个坑点,一定要去重!!!
#include<bits/stdc++.h> #define N 101001
using namespace std; int n,m,head[N],tot;
bool pvis[N];
struct nod {
int to,next;
} e[N];
void add(int u,int v) {
e[++tot].to=v,e[tot].next=head[u],head[u]=tot;
} int q,d[N];
bool vis[N];
queue<int>Q;
vector<int>G[];
void spfa(int x) {
while(!Q.empty()) Q.pop();
Q.push(x);
for(int i=; i<=n; i++) G[i].clear();
memset(vis,,sizeof(vis));
memset(d,0x3f,sizeof(d));
vis[x]=,d[x]=;
while(!Q.empty()) {
int u=Q.front();
Q.pop();
vis[u]=;
for(int i=head[u]; i; i=e[i].next) {
int v=e[i].to;
if(d[v]>d[u]+) {
d[v]=d[u]+;
if(!vis[v]) {
G[v].clear();
G[v].push_back(u);
Q.push(v);
vis[v]=;
}
} else if(d[v]==d[u]+) {
G[v].push_back(u);
}
}
}
}
int an[N],tpt;
void dg(int u,int a) {
int sz=G[u].size();
an[++tpt]=u;
for(int i=; i<sz; i++) {
int v=G[u][i];
if(v==a) continue;
dg(v,a);
}
} int main() {
scanf("%d%d",&n,&m);
for(int a,b,i=; i<=m; i++) {
scanf("%d%d",&a,&b);
add(a,b),add(b,a);
}
scanf("%d",&q);
for(int a,b,i=; i<=q; i++) {
scanf("%d%d",&a,&b);
// memset(pvis,0,sizeof(pvis));
spfa(a);
memset(an,,sizeof(an));
tpt=;
dg(b,a);
an[++tpt]=a;
sort(an+,an++tpt);
for(int j=; j<=tpt; j++){
if(an[j]!=an[j+]) printf("%d ",an[j]);
}
puts("");
}
return ;
}
洛谷——P3906 Geodetic集合的更多相关文章
- 【洛谷P1978】 集合
集合 题目链接 显然,我们是要把数据先排序的, 然后从大到小枚举每个数,看是否能选上, 能选就选,不能拉倒 若能,二分查找a[i]/k,若查找成功,ans++ 将a[i]/k标记为不能选择 最后输出答 ...
- 【洛谷P1491】集合位置
题目大意:求给定的一张无向带权图的次短路. 题解:先跑一遍 spfa 求出从起点到终点的最短路,记录路径.接着枚举删边,并重新跑 spfa,统计最小值即可. 至于为什么 dp 做法不行,暂时还不清楚. ...
- BZOJ 2734 洛谷 3226 [HNOI2012]集合选数【状压DP】【思维题】
[题解] 思维题,看了别人的博客才会写. 写出这样的矩阵: 1,3,9,... 2,6,18,... 4,12.36,... 8,24,72,... 我们要做的就是从矩阵中选出一些数字,但是不能选相邻 ...
- 洛谷$P3226\ [HNOI2012]$集合选数 状压$dp$
正解:$dp$ 解题报告: 传送门$QwQ$ 考虑列一个横坐标为比值为2的等比数列,纵坐标为比值为3的等比数列的表格.发现每个数要选就等价于它的上下左右不能选. 于是就是个状压$dp$板子了$QwQ$ ...
- 洛谷P3906 Hoof Paper, Scissor (记忆化搜索)
这道题问的是石头剪刀布的的出题问题 首先不难看出这是个dp题 其次这道题的状态也很好确定,之前输赢与之后无关,确定三个状态:当前位置,当前手势,当前剩余次数,所以对于剪刀,要么出石头+1分用一次机会, ...
- 【同余最短路】【例题集合】洛谷P3403 跳楼机/P2371 墨墨的等式
接触到的新内容,[同余最短路]. 代码很好写,但思路不好理解. 同余最短路,并不是用同余来跑最短路,而是通过同余来构造某些状态,从而达到优化时间空间复杂度的目的.往往这些状态就是最短路中的点,可以类比 ...
- 洛谷 P5206 - [WC2019]数树(集合反演+NTT)
洛谷题面传送门 神仙多项式+组合数学题,不过还是被我自己想出来了( 首先对于两棵树 \(E_1,E_2\) 而言,为它们填上 \(1\sim y\) 使其合法的方案数显然是 \(y\) 的 \(E_1 ...
- 洛谷 P6570 - [NOI Online #3 提高组] 优秀子序列(集合幂级数+多项式)
洛谷题面传送门 首先 \(3^n\) 的做法就不多说了,相信对于会状压 dp+会枚举子集的同学来说不算困难(暴论),因此这篇博客将着重讲解 \(2^nn^2\) 的做法. 首先如果我们把每个 \(a_ ...
- 洛谷 3784(bzoj 4913) [SDOI2017]遗忘的集合——多项式求ln+MTT
题目:https://www.luogu.org/problemnew/show/P3784 https://www.lydsy.com/JudgeOnline/problem.php?id=4913 ...
随机推荐
- Android View measure (三) 经常用法
ViewGroup.measureChildren() ViewGroup.measureChild() ViewGroup.measureChildWithMargins() /** * Ask o ...
- MICRO SIM卡(SIM小卡)尺寸图及剪卡图解
如今使用MICRO SIM卡的手机越来越多.近期刚刚买了一个手机到手才发现尼马使用的是MICRO SIM卡.再去买剪卡器吧,十几二十块用一次就废了,去营业厅吧.又比較远,懒的出门.怎么办呢,自己剪!这 ...
- react 使用
我的有道云笔记 React 事件: 1.不能使用 return false; 来阻止元素的默认行为.需要在方法的最前面使用 e.preventDefault() 来阻止元素的默认行为(例如:a 标签的 ...
- 3730 无线网络发射选址[NOIP 0214 day2 T1]
3730 无线网络发射选址 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 青铜 Bronze 题解 查看运行结果 题目描述 Description 随着智能手机的日 ...
- geckofx
geckofx是skybound工作室开发的一个开源的用于方便将gecko引擎(最主要的浏览器是firefox)链接到·net 窗体应用的一个组建. 外文名 geckofx 开发商 skyboun ...
- 洛谷P3402 最长公共子序列
题目背景 DJL为了避免成为一只咸鱼,来找Johann学习怎么求最长公共子序列. 题目描述 经过长时间的摸索和练习,DJL终于学会了怎么求LCS.Johann感觉DJL孺子可教,就给他布置了一个课后作 ...
- MSP430:定时器学习TimerA
4. 定时器TA 一.时钟源1.时钟源:ACLK/SMCLK 外部TACLK/INCLK2.分频:1/2/4/8 当 (注:TACLR 置位时,分频器复位) 二.计数模式通过设置MCx可以设置定时器的 ...
- FPC报价模块配置 UpdateCommand影响了预期 1 条记录中的 0 条 解决办法
今天在增加P4厂 FPC报价模块配置,增加刚挠信息节点,在保存时报错:UpdateCommand影响了预期 1 条记录中的 0 保存时使用:SqlDataAdapter批量更新DataTable,怎么 ...
- python抢票开发——设备预约助手实现
女朋友是药学院的,做实验时需要在特定的网站上进行设备预约,由于预约人数过多,从而导致从浏览器登录不进去或者登录进去预约失败等情况,所以我用python帮她写了一个抢位助手,让程序自动去进行位置预定,实 ...
- JavaScript判断对象数组中是否存在某个对象【转】
1. 如果要判断数组中是否存在某个元素的话很好判断,直接用数组的indexOf方法就好,存在返回当前索引不存在返回-1 var arr=[1,2,3,4] arr.indexOf(3) arr.ind ...