[cf1495D]BFS Trees
记$d_{G}(x,y)$表示无向图$G$中从$x$到$y$的最短路,设给定的图为$G=(V,E)$,$T$为其生成树,$E_{T}$为$T$的边集
下面,考虑计算$f(x,y)$——
首先,对于一棵树$T$,$z$在$x$到$y$的路径上(包括$x$和$y$)当且仅当$d_{T}(x,z)+d_{T}(z,y)=d_{T}(x,y)$
同时,由于$T$的性质,上述这三项都与$d_{G}$中相同,即等价于$d_{G}(x,z)+d_{G}(z,y)=d_{G}(x,y)$
由于这与$T$无关,即可确定$T$中在$x$到$y$的路径上的点(满足上述条件的$z$)
进而,当点数不等于$d_{G}(x,y)+1$(也即有多条最短路)必然无解,否则显然最短路存在且唯一
反过来,也可以确定不在$x$到$y$路径上的点$z$,考虑在$T$中以$x$或$y$为根,$z$的父亲$fa$必然是同一个节点,且显然也满足以下性质——
$(z,fa)\in E_{T}$、$d_{T}(x,z)=d_{T}(x,fa)+1$且$d_{T}(y,z)=d_{T}(y,fa)+1$
类似的,第一个条件写作$(z,fa)\in E$,后两个条件也可以等价的写作$d_{G}$
此时,当确定每一个不在$x$到$y$路径上点的$fa$时,将所有的$(z,fa)$以及$x$到$y$的最短路上所有边构成$E_{T}$,由于最短路的性质,这必然合法
因此,最终答案即所有不在$x$到$y$路径上节点$fa$的个数乘积,预处理最短路后计算复杂度为$o(m)$
最短路使用bfs即$o(nm)$,总复杂度为$o(n^{2}m)$,可以通过

1 #include<bits/stdc++.h>
2 using namespace std;
3 #define N 405
4 #define M 605
5 #define mod 998244353
6 struct Edge{
7 int nex,to;
8 }edge[M<<1];
9 queue<int>q;
10 int E,n,m,x,y,head[N],vis[N],d[N][N];
11 void add(int x,int y){
12 edge[E].nex=head[x];
13 edge[E].to=y;
14 head[x]=E++;
15 }
16 void bfs(int st){
17 memset(vis,0,sizeof(vis));
18 q.push(st);
19 vis[st]=1;
20 while (!q.empty()){
21 int k=q.front();
22 q.pop();
23 for(int i=head[k];i!=-1;i=edge[i].nex)
24 if (!vis[edge[i].to]){
25 d[st][edge[i].to]=d[st][k]+1;
26 q.push(edge[i].to);
27 vis[edge[i].to]=1;
28 }
29 }
30 }
31 int main(){
32 scanf("%d%d",&n,&m);
33 memset(head,-1,sizeof(head));
34 for(int i=1;i<=m;i++){
35 scanf("%d%d",&x,&y);
36 add(x,y);
37 add(y,x);
38 }
39 for(int i=1;i<=n;i++)bfs(i);
40 for(int i=1;i<=n;i++){
41 for(int j=1;j<=n;j++){
42 int tot=0,ans=1;
43 for(int k=1;k<=n;k++)
44 if (d[i][k]+d[k][j]==d[i][j])tot++;
45 else{
46 int s=0;
47 for(int l=head[k];l!=-1;l=edge[l].nex)
48 if ((d[i][k]==d[i][edge[l].to]+1)&&(d[j][k]==d[j][edge[l].to]+1))s++;
49 ans=1LL*ans*s%mod;
50 }
51 if (tot!=d[i][j]+1)ans=0;
52 printf("%d ",ans);
53 }
54 printf("\n");
55 }
56 }
[cf1495D]BFS Trees的更多相关文章
- 2021.9.30 Codeforces 中档题四道
Codeforces 1528D It's a bird! No, it's a plane! No, it's AaParsa!(*2500) 考虑以每个点为源点跑一遍最短路,每次取出当前距离最小的 ...
- [LeetCode] 675. Cut Off Trees for Golf Event_Hard tag: BFS
You are asked to cut off trees in a forest for a golf event. The forest is represented as a non-nega ...
- UVA.122 Trees on the level(二叉树 BFS)
UVA.122 Trees on the level(二叉树 BFS) 题意分析 给出节点的关系,按照层序遍历一次输出节点的值,若树不完整,则输出not complete 代码总览 #include ...
- Trees on the level UVA - 122 复习二叉树建立过程,bfs,queue,strchr,sscanf的使用。
Trees are fundamental in many branches of computer science (Pun definitely intended). Current state- ...
- UVA 122 -- Trees on the level (二叉树 BFS)
Trees on the level UVA - 122 解题思路: 首先要解决读数据问题,根据题意,当输入为“()”时,结束该组数据读入,当没有字符串时,整个输入结束.因此可以专门编写一个rea ...
- 【紫书】Trees on the level UVA - 122 动态建树及bfs
题意:给你一些字符串,代表某个值被插入树中的位置.让你输出层序遍历. 题解:动态建树. 由于输入复杂,将输入封装成read_input.注意输入函数返回的情况 再将申请新节点封装成newnode(). ...
- codeforces 1283D. Christmas Trees(bfs)
链接: https://codeforces.com/contest/1283/problem/D 题意:给定n个不同的整数点,让你找m个不同的整数点,使得这m个点到到这n个点最小距离之和最小. 思路 ...
- BFS+数据处理 Under the Trees UVa
题意:将多叉树转化为括号表示法,每个非叶结点的正下方都有一个'|'然后下方是一排'-'和字符,恰好覆盖所有子结点的正上方,单独的一行'#'为数据的结束标志 解题思路:用gets将字符数组输入,本题不用 ...
- 【BZOJ-1656】The Grove 树木 BFS + 射线法
1656: [Usaco2006 Jan] The Grove 树木 Time Limit: 5 Sec Memory Limit: 64 MBSubmit: 186 Solved: 118[Su ...
随机推荐
- Edit Step Ladders - UVA 10029
题意 题目链接(Virtual Judge):Edit Step Ladders - UVA 10029 题意: 如果单词 \(x\) 能通过添加.删除或修改一个字母变换为单词 \(y\),则称单词 ...
- iOS实现XMPP通讯(二)XMPP编程
项目概述 这是一个可以登录jabber账号,获取好友列表,并且能与好友进行聊天的项目. 使用的是第三方库XMPPFramework框架来实现XMPP通讯. 项目地址:XMPP-Project 项目准备 ...
- 土壤稳定性评估(ArcPy实现)
一.背景 在进行区域土地开发时,需要对整个区域的土壤稳定性评估.应用GIS空间分析方法,能够快速有效地对影响土壤稳定性的因子进行制图并评估打分,通过构建评价体系,利用叠加分析,形成土壤稳定性专题图,以 ...
- hmac和socketserver
一,hmac 验证客户端的合法性 hmac,检测客户端是否合法,不依赖登录认证 server import os,socket,hmac sk=socket.socket() sk.bind(('12 ...
- 使用CSS选择器(第一部分)
目录 使用CSS选择器(第一部分) 使用CSS基本选择器 选择所有元素 通用选择器 代码清单1 使用通用选择器 根据类型选择元素 元素类型选择器 代码清单2 使用元素类型选择器 提示 根据类选择元素 ...
- 如何在另一台设备上搭建python接口自动化项目所需要的第三方库
1.如何将当前项目引用的第三方库导出,在新建项目时,选择New environment using>Virtualenv 2.然后右键选择open in terminal:输入命令:pip fr ...
- 消息队列那么多,为什么建议深入了解下RabbitMQ?
你为啥要在项目中选择xxx消息中间件? 提起消息队列,也许你的脑海里会不自觉地蹦出好多概念:JMS.Kafka.RocketMQ.AMQP.RabbitMQ.ActiveMQ.Pulsar.Redis ...
- javascript-jquery的ajax
用一个例子来说明: html部分 <form action="name1"> <input class="class1" type=&quo ...
- the Agiles Scrum Meeting 博客汇总
the Agiles 团队博客目录 一.Scrum Meeting 1. Alpha the Agiles Scrum Meeting 1 the Agiles Scrum Meeting 2 the ...
- 浅谈如何爆踩TLEcoders
对付一些速度比老奶奶都慢的评测姬, 除了超级小的常数,往往还不得不使用一些不算办法的办法 比如说这个让人无语的$ACcoders$的评测姬, 当我们感到代码已经无法再卡常的时候,对人生已经近乎绝望的时 ...