P2416 泡芙 题解

P2416 泡芙 题解

题目传送门

我的博客

前言

笔者一开始写了一版 \(O(NQ)\) 的,竟然没有TLE?(但是WA了,且做法假了

本题做法:tarjan缩点+LCA。

思路

拿到这个题首先研究样例,发现样例中竟然有环。如下图。有环怎么办?

根据题意,我们可以得知,在一个环中的每一条边都可以走一遍。因此我们可以先把环缩成一个点,将环内的边权全部转化为缩点之后的点权。

缩点之后,剩下的边保证是一个树。此时我们不难想到,可以用倍增的思想,看一看路径上是否有边权为 \(1\) 的边(即是否有泡芙)。别忘记某一个点可能是一个环缩成的,所以也要考虑这个点的点权!

所以最终统计的就是

\[dis(u,lca(u,v))+dis(lca(u,v),v)+val_{lca(u,v)} \]

代码

const int N=3e5+10;
const int INF=0x3f3f3f3f;
int n,m,Q;
struct nodein{int x,y,z;
}in[N];//记录缩点之前的读入,方便建新图
struct edge{int nxt,to,w;
}e[N*10];//如果算不准开多大,空间足够的情况下尽可能开大一点
int head[N],num_Edge=0;
void add_Edge(int from,int to,int w){e[++num_Edge].nxt=head[from];e[num_Edge].to=to;e[num_Edge].w=w;head[from]=num_Edge;
}
//tarjan板子
int dfn[N],low[N],dfscnt=0;
int scc[N],sc=0,w[N];
int st[N],top=0;
void tarjan(int u,int fa){//这里的 fa 并不是父结点,而是读入时边的编号
//这里是改的时候懒得再改了,所以直接写了 fa。下文的 e[i].w 是懒得再开一个数组了。dfn[u]=low[u]=++dfscnt;st[++top]=u;for(int i=head[u];i;i=e[i].nxt){int v=e[i].to;if(fa==e[i].w) continue;//e[i].w 表示读入时边的编号。if(!dfn[v]){tarjan(v,e[i].w);low[u]=min(low[u],low[v]);}else {low[u]=min(low[u],dfn[v]);}}if(dfn[u]==low[u]){sc++;while(st[top]!=u&&top){scc[st[top]]=sc;top--;}scc[st[top]]=sc;top--;		}
}
//以上------tarjan板子
//LCA板子
int ff[N][50],dep[N],sum[N];
void init_lca(){//初始化for(int j=1;j<=25;j++){for(int i=1;i<=n;i++){ff[i][j]=ff[ff[i][j-1]][j-1];}}
}
void dfs(int u,int fa){ff[u][0]=fa;dep[u]=dep[fa]+1;sum[u]+=w[u];//注意这里要累加点权for(int j=1;j<=25;j++){ff[u][j]=ff[ff[u][j-1]][j-1];}for(int i=head[u];i;i=e[i].nxt){int v=e[i].to;if(v==fa) continue;sum[v]=sum[u]+e[i].w;//更新之前累加点权!!!这里调了20分钟dfs(v,u);}
}
int lca(int x,int y){if(dep[x]<dep[y]) swap(x,y);for(int i=25;i>=0;i--){if(dep[ff[x][i]]>=dep[y]) x=ff[x][i];//注意可以取等!}if(x==y) return x;for(int i=25;i>=0;i--){if(ff[x][i]!=ff[y][i]){x=ff[x][i],y=ff[y][i];}}return ff[x][0];
} 
//以上LCA板子---------
signed main(){n=Read();m=Read();for(int i=1;i<=m;i++){int x=Read(),y=Read(),z=Read();add_Edge(x,y,i);//from,to,idadd_Edge(y,x,i);in[i]=(nodein){x,y,z};}for(int i=1;i<=n;i++){if(!dfn[i]) tarjan(i,0);}for(int i=1;i<=n;i++) head[i]=0;//别忘了清空 head 数组!num_Edge=0;//这里为了缩减码量直接清空用了同一个数组for(int i=1;i<=m;i++){int u=scc[in[i].x],v=scc[in[i].y];if(u==v) w[u]+=in[i].z; //累加点权if(u!=v){//建新图add_Edge(u,v,in[i].z);add_Edge(v,u,in[i].z);}}init_lca();dfs(1,0);Q=Read();while(Q--){int x=Read(),y=Read();int fx=scc[x],fy=scc[y];if(fx==fy){//在一个环里,直接判断环内是否有边权为 1 的边if(w[fx]) puts("YES");else puts("NO");} else {int f=lca(fx,fy);if(sum[fx]+sum[fy]-2*sum[f]+w[f]>0) puts("YES");else puts("NO");}}return 0; 
}

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

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

相关文章

MySQL超大分页怎么处理?

MySQL超大分页怎么处理?超大分页通常发生在数据量大的情况下,使用LIMIT分页查询且需要排序时效率较低。可以通过覆盖索引和子查询来解决。首先查询数据的ID字段进行分页,然后根据ID列表用子查询来过滤只查询这些ID的…

2025年上海GEO公司权威推荐:GEO运营商/GEO搜索优化/AI搜索优化服务商精选

在AI搜索引擎快速迭代的背景下,GEO(地理定位优化)服务已成为企业精准营销的核心工具。根据行业数据统计,2025年全球GEO服务市场规模预计达到800亿美元,中国企业在地理定位优化领域的投入保持年均增长率12%-15% 的…

P14364 [CSP-S 2025] 员工招聘 / employ

没见过的一种 DP 类型,我们称它为贡献延后计算。 具体来说就是我们只关心选出来了些什么,至于这些东西的顺序我们在转移的时候不重复的钦定即可。 考虑本题设 \(f_{i, j, k}\) 表决策到前 \(i\) 场面试,有 \(j\) 个…

post表单提交接口测试

新建线程组(线程数1、循环次数1),添加“HTTP请求”,服务器httpbin.org,端口80,方法POST,路径/post 勾选“使用表单数据”,在参数栏添加2组数据(如username=test、password=123456)添加“察看结果树”,运行后…

2025年常州logo设计公司权威推荐榜单:商标logo设计/文字logo设计/品牌logo设计源头公司精选

在品牌竞争日益激烈的市场环境中,专业的logo设计已成为企业构建视觉识别、传递品牌价值的核心环节。根据行业报告数据,2025年全球VI设计市场年增长率预计达12%,中国企业,尤其是长三角地区对专业设计服务的需求旺盛…

JMeter题目

一. 基础HTTP GET接口请求测试 操作步骤:打开JMeter,新建测试计划,右键添加“线程组”(线程数1、循环次数1)。线程组下添加“HTTP请求”,服务器名称/IP填写httpbin.org,端口80,请求方法选GET,路径填写/get。添…

centos7 文件夹下 按年月统计文件大小

我是一个运维人员,我想统计centos7.5环境下,/app/minio/file-bucket文件夹内,文件按照日期,按年月统计文件总大小当然可以!我来帮您改造这个命令,使其能够按照年月分组统计。当前的命令只能按月份统计,无法区分…

完整教程:舆情处置的智能化进阶:Infoseek舆情系统如何构建企业数字免疫体系

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

2025 年 BA 自控系统厂家最新推荐排行榜:行业优质企业核心优势全面解析,含权威测评数据空调箱 BA 自控系统/新风机组 BA 自控系统公司推荐

引言 在建筑楼宇智能化与工业自动化快速发展的当下,BA 自控系统作为保障建筑环境舒适、工业生产高效及能源合理利用的关键,市场需求持续攀升。但行业内厂家水平不一,为帮助需求方精准选择,行业协会开展了 BA 自控系…

基础HTTP GET 接口请求测试

打开JMETER,新建测试计划,右键添加“线程组”(线程组1、)线程组下添加“HTTP请求”,服务器名称/IP填写httpbin.org,端口80,请求方法选GET,路径填写/get添加“察看结果树”监听器,点击运行,验证响应状态码200…

HTTP POST表单提交接口测试

HTTP POST表单提交接口测试操作步骤:新建线程组(配置同上),添加“HTTP请求”,服务器httpbin.org,端口80,方法POST,路径/post。勾选“使用表单数据”,在参数栏添加2组数据(如username=test、password=123456)…

2025年铜陵钨杆回收公司权威推荐榜单:钨条回收/废钼回收/钼铁回收源头公司精选

在有色金属循环利用产业快速发展的背景下,钨、钼等稀有金属的回收再利用已成为资源可持续利用的重要环节。根据行业数据统计,2025年我国稀有金属回收市场规模预计突破500亿元,其中钨钼类金属因价值高、应用广,回收…

API接口测试

核心目的是在软件开发生命周琴早期发现缺陷、降低修复成本,并通过验证系统组件间的交互来提升整体稳定性、安全性和效率,尤其适用于前后端分离、微服务架构及高复杂度系统

▇壳子

#define gc getchar_unlocked template<typename T> void read(T &x) {char c = gc(); int f = 1; x = 0;while (!isdigit(c)) f = (c == - ? -f : f), c = gc();while (isdigit(c)) x = (x << 3) + …

AI元人文构想:人机共生智慧文明治理新范式整理报告

AI元人文构想:人机共生智慧文明治理新范式整理报告 核心摘要 AI元人文构想是由岐金兰提出的应对智能时代价值困境的系统性框架,其核心在于从传统"价值对齐"范式转向"价值共生"范式,通过"三…

2025年湖南专利申请公司权威推荐榜单:期刊论文公司/专著合著出版公司/重点课题申报服务机构精选

在创新驱动发展的时代背景下,专利已成为企业提升核心竞争力、保护知识产权的重要战略资源。2024年,中国发明专利有效量达到惊人的数字,展示了我国强大的创新活力。本文将基于2025年行业数据,为您深入分析湖南地区专…

基础HTTP GET接口请求测试

基础HTTP GET接口请求测试操作步骤:打开JMeter,新建测试计划,右键添加“线程组”(线程数1、循环次数1)。线程组下添加“HTTP请求”,服务器名称/IP填写httpbin.org,端口80,请求方法选GET,路径填写/get。添加“…

2025年比较好的设计感保温杯厂家推荐及选择参考

2025年比较好的设计感保温杯厂家推荐及选择参考在当今快节奏的生活中,一款兼具实用性与设计感的保温杯不仅能满足日常饮水需求,更能成为彰显个人品味的时尚单品。2025年,保温杯市场涌现出众多注重设计感与功能性的品…

2025 年自控系统厂家最新推荐榜:综合实力测评出炉,盘点行业权威品牌及选择指南文丘里阀环境监测/智能建筑能源管理自控系统/电力监控系统公司推荐

引言 近期,行业权威协会针对自控系统领域开展综合测评,通过技术实力、产品质量、服务能力、市场口碑四大维度,对近百家厂家进行严格考核,最终筛选出综合表现优异的前十品牌。测评过程中,技术实力维度重点考察工程…

HTTPPOST表单提交接口测试

1. 新建线程组(配置同上),添加“HTTP请求”,服务器httpbin.org,端口80,方法POST,路径/post。2. 勾选“使用表单数据”,在参数栏添加2组数据(如username=test、password=123456)。3. 添加“察看结果树”,运行…