当前位置: 首页 > news >正文

CF1045C Hyperspace Highways - Link

发现每个点双内两个点的距离为 \(1\),考虑使用圆方树。
建出圆方树后,方点点权为 \(1\),圆点点权为 \(0\),每次询问求路径上的点权和即可。

代码

#include<bits/stdc++.h>
using namespace std;
namespace IO{template<typename T>inline void read(T&x){x=0;char c=getchar();bool f=0;while(!isdigit(c)) c=='-'?f=1:0,c=getchar();while(isdigit(c)) x=x*10+c-'0',c=getchar();f?x=-x:0;}template<typename T>inline void write(T x){if(x==0){putchar('0');return ;}x<0?x=-x,putchar('-'):0;short st[50],top=0;while(x) st[++top]=x%10,x/=10;while(top) putchar(st[top--]+'0');}inline void read(char&c){c=getchar();while(isspace(c)) c=getchar();}inline void write(char c){putchar(c);}inline void read(string&s){s.clear();char c;read(c);while(!isspace(c)&&~c) s+=c,c=getchar();}inline void write(string s){for(int i=0,len=s.size();i<len;i++) putchar(s[i]);}template<typename T>inline void write(T*x){while(*x) putchar(*(x++));}template<typename T,typename...T2> inline void read(T&x,T2&...y){read(x),read(y...);}template<typename T,typename...T2> inline void write(const T x,const T2...y){write(x),putchar(' '),write(y...),sizeof...(y)==1?putchar('\n'):0;}
}using namespace IO;
const int maxn=100010;
int n,m,q,dfn[maxn],low[maxn],tot,cnt,fa[maxn*2][20],deep[maxn*2],rdeep[maxn*2];
vector<int>e[maxn],st,r[maxn*2];
void dfs(int u){st.push_back(u);dfn[u]=low[u]=++tot;for(int v:e[u]){if(dfn[v]){low[u]=min(low[u],dfn[v]);continue;}dfs(v);low[u]=min(low[u],low[v]);if(low[v]==dfn[u]){cnt++;while(st.back()!=v){r[cnt].push_back(st.back()),r[st.back()].push_back(cnt);st.pop_back();}r[cnt].push_back(st.back()),r[st.back()].push_back(cnt);st.pop_back();r[cnt].push_back(u),r[u].push_back(cnt);}}
}
void dfs2(int u,int fa=0){rdeep[u]=rdeep[fa]+1;::fa[u][0]=fa;for(int i=1;i<=19;i++) ::fa[u][i]=::fa[::fa[u][i-1]][i-1];for(int v:r[u]){if(v==fa) continue;deep[v]=deep[u]+(v>n);dfs2(v,u);}
}
int lca(int u,int v){if(rdeep[u]<rdeep[v]) swap(u,v);for(int i=19;i>=0;i--) if(rdeep[fa[u][i]]>=rdeep[v]) u=fa[u][i];if(u==v) return u;for(int i=19;i>=0;i--) if(fa[u][i]!=fa[v][i]) u=fa[u][i],v=fa[v][i];return fa[u][0];
}
signed main(){read(n,m,q);cnt=n;for(int i=1;i<=m;i++){int u,v;read(u,v);e[u].push_back(v),e[v].push_back(u);}for(int i=1;i<=n;i++) if(dfn[i]==0) dfs(i),st.clear();dfs2(1);for(int i=1;i<=q;i++,write('\n')){int u,v;read(u,v);int l=lca(u,v);write(deep[u]+deep[v]-deep[l]-deep[fa[l][0]]);}return 0;
}
http://www.rkmt.cn/news/158661.html

相关文章:

  • 化妆品级褐藻寡糖及褐藻寡糖钾盐:行业热门选择 - 工业设备
  • ESD管电源端口浪涌电流泄放路径设计方案
  • 【Java毕设源码分享】基于springboot+vue的实验室实验报告管理系统的设计与实现(程序+文档+代码讲解+一条龙定制)
  • 熔融缩聚中影响线型缩聚物分子量的因素
  • 2025年跨境电商全产业链园区出租与办公室租赁推荐:五大高效赋能平台 - 品牌2026
  • 前端学习笔记迁移与整理:Bootstrap、jQuery与Vue实战
  • C语言实现GBK到Unicode的字符转换
  • 2025年12月国内百/千/万/十万/三十万/百万级洁净实验室装修公司实力盘点:这几家行业标杆值得关注! - 品牌推荐用户报道者
  • 【scala】匿名函数和高阶函数
  • 【Java毕设源码分享】基于springboot+vue的大学生校园线上招聘系统的设计与实现(程序+文档+代码讲解+一条龙定制)
  • 【Mac开发者福音】:Open-AutoGLM 苹果平台支持倒计时,3大关键技术突破揭秘
  • 图形旋转与翻折典型题型全解析
  • 2025跨境电商办公室租赁、出租推荐,全产业链园区私藏5家优选、避坑必看 - 品牌2026
  • 彻底解放双手!基于电鱼智能 RK3308 的“语音控杆”智能垂钓助手方案
  • 2025年上海双主轴定制服务口碑榜发布,前三甲揭晓,双主轴双排刀/插补Y/三轴机/双主轴/尾顶机/4+4车铣/排刀机双主轴厂家推荐排行 - 品牌推荐师
  • 使用 GitHub Pages 发布 D3 可视化项目
  • 架构决策的思维框架:在技术选择的十字路口,如何做出不后悔的选择
  • C语言char类型详解:字符与整数的转换
  • 2025年咸阳值得信赖的装修设计公司,pur封边/颗粒板/水包沙/美式欧式/电视柜/小红砖/钢筋工/门窗/全屋定制装修设计企业推荐榜 - 品牌推荐师
  • PS制作光滑塑料质感文字特效教程
  • 10大企业级Agentic AI架构全解析:从入门到实战,破解AI Agent落地难题
  • 紧急通知:Open-AutoGLM即将闭源!现在不搭就再也拿不到代码了
  • 2025年肃宁县眼镜店品牌实力推荐榜:时光眼镜/双十二眼镜品牌精选 - 品牌推荐官
  • 鱼探仪去 X86 化:电鱼智能 RK3588 提供高性能国产化架构平替
  • 节能与新能源汽车技术路线图2.0发布
  • Vue实战:分页、HTTP封装与农历日历高亮
  • 3ds Max模型与Vray材质如何高效转C4D Octane
  • 【Open-AutoGLM与豆包技术深度解析】:揭秘AI自动代码生成背后的黑科技
  • 高清在线测试视频资源合集(含多分辨率MP4链接)
  • 【12G】供热空调设计全套资料包免费下载