题解:UVA1464 Traffic Real Time Query System

news/2025/3/9 21:24:00/文章来源:https://www.cnblogs.com/jxy2012/p/18761436

题目

将图建成圆方树后会发现,必经点数 = 圆方树上两点路径上圆点数。

考虑求路径中的圆点数量。因为起点和终点均为圆点,所以路径 \(x\)\(y\) 的答案即为 \((dis(x,y)+1)/2\)

#include <bits/stdc++.h>
using namespace std;
using ll = long long;
const ll mod = 1e9 + 7;
const int N = 200005;
const int INF = 0x3f3f3f3f;
int n, m;
int dfn[N], low[N], ck, cnt;
vector<int> G[N], H[N];
stack<int> s;
int vis[N], tot;
void tarjan(int u, int fa) {dfn[u] = low[u] = ++ck;vis[u] = tot;s.push(u);for (auto v : G[u]) {if (!dfn[v]) {tarjan(v, u);low[u] = min(low[u], low[v]);if (low[v] >= dfn[u]) {cnt++;while (1) {int x = s.top();s.pop();H[cnt].push_back(x);H[x].push_back(cnt);if (x == v) break;}H[cnt].push_back(u);H[u].push_back(cnt);}} else if (v != fa){low[u] = min(low[u], dfn[v]);}}
}
int dep[N], fa[N], sz[N], son[N], top[N];
void dfs1(int u) {dfn[u] = ++ck;dep[u] = dep[fa[u]] + 1;sz[u] = 1;for (auto v : H[u]) {if (v == fa[u]) continue;fa[v] = u;dfs1(v);sz[u] += sz[v];if (sz[v] > sz[son[u]]) son[u] = v;}
}
void dfs2(int u, int h) {top[u] = h;if (son[u]) dfs2(son[u], h);for (auto v : H[u]) {if (v == fa[u] || v == son[u]) continue;dfs2(v, v);}
}
int LCA(int x, int y) {while (top[x] != top[y]) {if (dep[top[x]] < dep[top[y]]) swap(x, y);x = fa[top[x]];}return dep[x] < dep[y] ? x : y;
}
int dis(int x, int y) {if (vis[x] != vis[y]) return 0;int ans = dep[x] + dep[y] - 2 * dep[LCA(x, y)];ans = ans / 2 - 1;return ans;
}
struct Node {int x, y;
} bian[N];
int a[N];
int main() {while (scanf("%d%d", &n, &m) != EOF) {if (n == 0 && m == 0) break;while (!s.empty()) {s.pop();}for (int i = 1; i < N; i++) {dfn[i] = low[i] = 0;dep[i] = fa[i] = son[i] = sz[i] = top[i] = 0;vis[i] = 0;G[i].clear();H[i].clear();}ck = 0;tot = 0;for (int i = 1; i <= m; i++) {int u, v;scanf("%d%d", &u, &v);G[u].push_back(v);G[v].push_back(u);bian[i] = {u, v};}cnt = n;for (int i = 1; i <= n; i++) {if (!dfn[i]) {tot++;vis[i] = 1;tarjan(i,-1);dfs1(i);dfs2(i, i);}}ck = 0;int q;scanf("%d", &q);while (q--) {int x, y;scanf("%d%d", &x, &y);int a = bian[x].x, b = bian[x].y, c = bian[y].x, d = bian[y].y;int ans = max(max(dis(b, d), dis(a, d)), max(dis(b, c), dis(a, c)));// printf("#%d\n", LCA(a, b));printf("%d\n", ans);}}return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/896110.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Oracle VM VirtualBox Ubuntu 桥接模式下 固定虚拟机的 ip

Ubuntu版本: Ubuntu server:22.04.5 LTS 注意:网上找了很多版本,都是相似的去编辑 /etc/netplan/ 下的 xx-cloud-init.yaml 文件,但是配置文件中,有一段提示需要注意此文件是自动生成的,每次开机都会重新生成,所以直接编辑,将不起作用,需要按提示 添加 /etc/cloud/cl…

AtCoder Beginner Contest 396-G - Flip Row or Col

https://atcoder.jp/contests/abc396/tasks/abc396_g 下面给出题目的中文思路、详细解释以及带中文注释的 C++ 实现代码。代码实现 下面给出带中文注释的 C++ 代码: #include <bits/stdc++.h> using namespace std;typedef long long ll;// 快速Walsh-Hadamard变换(FWH…

DVWA-CSRF-Low

1.更改密码并使用BP抓包2.将抓到的数据包发送到重放模块,删除referer 内容,密码成功更改;referer不影响数据包请求结果,判断存在漏洞3.构造下面的index.html文件,其中的链接为更改密码链接 <!DOCTYPE html> <html lang="en"> <head><meta …

UE5之重定向Mixamo动画

首先将下载的fbx格式的角色导入UE5中,得到角色的骨骼,网格体,物理资产等,然后将fbx格式的动画也导入到UE中,选择刚刚导入的骨骼。 然后右键 动画---IK绑定---IK绑定,新建两个IK绑定Epic和Archer,分别选择刚刚导入的骨骼以及需要重定向的目标骨骼。在两处骨骼的头,左右手…

p44太阳花

from turtle import * color(red, yellow) begin_fill() while Ture:forward(200)left(170)if abs(pos()) < 1:break end_fill() done()

基于IEKF迭代扩展卡尔曼滤波算法的数据跟踪matlab仿真,对比EKF和UKF

1.程序功能描述 基于IEKF迭代扩展卡尔曼滤波算法的数据跟踪matlab仿真,对比EKF和UKF.仿真输出误差收敛曲线和误差协方差收敛曲线。 2.测试软件版本以及运行结果展示MATLAB2022A版本运行 (完整程序运行后无水印) 3.核心程序for i=1:Lekf-1z =…

Winform控件命名规则

C#控件命名规范控件分类控件名称命名规范说明数据显示控件DataGridViewdgv 数据绑定和定位控件BindingSourcebds BindingNavigatorbdn 文本编辑控件TextBoxtxt RichTextBoxrtxt MaskedTextBoxmtxt 信息显示控件Labellbl LinkLabelllbl StatusTripst ProgressBarpb 网页显示控件…

VMware中三种网络的区别

目录桥接模式仅主机模式NAT网络模式 桥接模式桥接模式 在Linux中,桥接模式通常指的是网络桥接(Network Bridging),它是一种将多个网络接口连接在一起的技术,形成一个局域网(LAN),使它们能够像在同一个网络中一样通信。仅主机模式仅主机网络 在仅主机模式下,虚拟网络是…

UE5之使用C++显示瞄准准星

1.创建控件蓝图 首先右键 用户界面---控件蓝图,创建一个控件蓝图CrosshairWidget,默认继承自UserWidget。在CrosshairWidget中新建一个Canvas Panel,再创建一个Image,加入准星图像并设置位置居中,这样准星的UI就完成了。 再添加一个图像,将其绘制为圆形盒体,这样就得到了…

20242802 2024-2025-2 《网络攻防实践》第二周作业

20242802 2024-2025-2 《网络攻防实践》第二周作业 目录 目录20242802 2024-2025-2 《网络攻防实践》第二周作业1. 实验要求2. 实验相关知识点nmap工具使用3. 实验详细过程3.1 从www.besti.edu.cn、baidu.com、sina.com.cn中选择一个DNS域名进行查询,获取如下信息:3.2尝试获取…