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

第十四届蓝桥杯省B.砍树

第十四届蓝桥杯省B.砍树

题目

在这里插入图片描述

题目解析及思路

考虑一对无序数对的点 x和 y,如果我们砍掉某条边可以让这两个点不连通,那么这条边一定是从 x到 y 路径上的一点,我们可以让从 x到 y 路径的边权值都加1。这个操作我们可以使用树上差分。 对于 m个无序数对我们都如此操作,最后如果某条边的权值为 m 则说明它符合条件,我们选出符合条件编号最大的那条边就是答案,如果没有权值为 m的边则说明无解。

树上差分

代码

#include<bits/stdc++.h>
#define int long long
#define endl '\n'
#define pii pair<int,int>
#define ms(s,x) memset(s, x, sizeof(s))
using namespace std;
typedef pair<int,int> PII;
const int inf = 0x3f3f3f3f;
const int mod = 1000000007;
const int N = 200010;int n, m;
vector<int> e[N];
int depth[N], fa[N][16];
int f[N];
int root;
int ans;
map<PII, int> mp;//lca板子
void bfs(int root){memset(depth,0x3f,sizeof(depth));depth[0] = 0,depth[root] = 1;queue<int> q;q.push(root);while(!q.empty()){int t = q.front();q.pop();for(int j:e[t]){if(depth[j] > depth[t] + 1){depth[j] = depth[t] + 1;q.push(j);fa[j][0] = t;for(int k=1;k<=15;k++){fa[j][k] = fa[fa[j][k-1]][k-1];}}}}
}int lca(int a,int b){if(depth[a] < depth[b]) swap(a,b);for(int k=15;k>=0;k--){if(depth[fa[a][k]] >= depth[b]){a = fa[a][k];}}if(a == b) return a;for(int k=15;k>=0;k--){if(fa[a][k] != fa[b][k]){a = fa[a][k];b = fa[b][k];}}return fa[a][0];
}
//对树上差分数组f进行dfs求和
int dfs(int u,int fa){int res = f[u];for(auto v:e[u]){if(v == fa) continue;int g = dfs(v,u);if(g == m){ans = max(ans,mp[{v,u}]);}res += g;}return res;
}
signed main(){cin.tie(0);cout.tie(0);ios::sync_with_stdio(false);ans = 0;cin>>n>>m;for(int i=0;i<n-1;i++){int u,v;cin>>u>>v;mp[{u,v}] = mp[{v,u}] = i+1;e[u].push_back(v);e[v].push_back(u);}//lcabfs(1);//树上差分for(int i=0;i<m;i++){int u,v;cin>>u>>v;int z = lca(u,v);f[u] ++;f[v] ++;f[z] -= 2;}dfs(1,-1);cout << (ans == 0 ? -1 : ans) << '\n';
}
http://www.xdnf.cn/news/112771.html

相关文章:

  • 如何创建极狐GitLab 议题?
  • 膳食营养诊断活动:科技赋能,共筑全民健康新基石
  • Langchain+RAG+向量数据库
  • GitHub万星项目维护者分享:开源协作的避坑指南
  • C++ 日志系统实战第二步:不定参数函数解析
  • 深入理解 BLE PHY 模式:1M、2M 与 Coded 的演进与应用
  • 手撕C++STL list:深入理解双向链表的实现
  • 解决 Dart Sass 的旧 JS API 弃用警告 的详细步骤和解决方案
  • 【含文档+PPT+源码】基于SpringBoot+Vue旅游管理网站
  • 【无人机】无人机遥控器设置与校准,飞行模式的选择,无线电控制 (RC) 设置
  • 精益数据分析(20/126):解析经典数据分析框架,助力创业增长
  • day36图像处理OpenCV
  • Windows IIS 配置编辑器 应用程序初始化 <applicationInitialization>
  • 开发并发布一个属于自己的包(npm)
  • 算法笔记.spfa算法(bellman-ford算法的改进)
  • 要从给定的数据结构中提取所有的 itemList 并将其放入一个新的数组中
  • Python爬虫(3)HTML核心技巧:从零掌握class与id选择器,精准定位网页元素
  • mfc学习(一)
  • 基于whisper和ffmpeg语音转文本小程序
  • 【深度学习】#9 现代循环神经网络
  • 【C++】继承
  • 数据结构与算法实战:从理论到落地的深度探索
  • 原生微信小程序,canvas生成凭证,保存到手机
  • Java的进阶学习
  • 鲲鹏麒麟搭建Docker仓库
  • 海量聊天消息处理:ShardingJDBC分库分表、ClickHouse冷热数据分离、ES复合查询方案、Flink实时计算与SpringCloud集成
  • C++ RPC以及cmake
  • VBA技术资料MF300:利用Mid进行文本查找
  • 专家系统的一般结构解析——基于《人工智能原理与方法》的深度拓展
  • JBoltAI 赋能金融文档:基于 RAG 的基金招募说明书视觉增强方案