最新要闻
- 小米辣椒的腌制方法放一年都不坏?_新消息
- 看到洋人吃冰激凌,这样的场景应该珍惜
- 今日播报!宝马MINI称两名女生不是公司员工 不会再出现:回应求原谅 你还会买吗?
- 世界焦点!内地票房破2亿!《灌篮高手》登顶淘宝热搜:周边被抢空
- 三方签约共建华侨大学国家语言服务出口基地 今日报
- 买到烂尾楼“钱房两空”?最高法明确优先保护购房者权益|每日资讯
- 世界看点:面对特斯拉掀起的价格战,有“勇士”选择应战,有“逆行者”坚持高端
- 电脑c盘怎么除了系统其他文删除件_怎样清理c盘除了系统之外的东西
- 天天快看:张小泉客服回应菜刀拍蒜断两截:比较硬的刀就容易断裂
- 解决信号盲区!曝小米Civi 3支持5G异网漫游:光明正大“蹭”网 当前关注
- 环球最资讯丨10倍提升 安卓新旗舰放弃祖传USB2.0:体验变化太明显了
- 网上的那些喷子 为啥一玩这类游戏就闭嘴了?-全球热点评
- 热门:i7处理器32GB+1TB仅2999 这款性价比神机只有巴掌大小
- 潍坊开展“10+”行动 助力工业经济高质量发展 天天新消息
- 新能源产品集结,长安加速向全球企业转型 当前快播
- 英国宣布制裁5名俄公民,梅德韦杰夫回应:英国是俄罗斯永远的敌人
手机
iphone11大小尺寸是多少?苹果iPhone11和iPhone13的区别是什么?
警方通报辅警执法直播中被撞飞:犯罪嫌疑人已投案
- iphone11大小尺寸是多少?苹果iPhone11和iPhone13的区别是什么?
- 警方通报辅警执法直播中被撞飞:犯罪嫌疑人已投案
- 男子被关545天申国赔:获赔18万多 驳回精神抚慰金
- 3天内26名本土感染者,辽宁确诊人数已超安徽
- 广西柳州一男子因纠纷杀害三人后自首
- 洱海坠机4名机组人员被批准为烈士 数千干部群众悼念
家电
2023.4.21【图论】点分治|世界新视野
2023.4.21【图论】点分治
(点分治其实是广泛地统计树上全局路径问题的算法,此处采用luogu模板题的题面)
题目描述
给定一棵有 \(n\) 个点的树,询问树上距离为 \(k\) 的点对是否存在。
- 对于 \(100\%\) 的数据,保证 \(1 \leq n\leq 10^4\),\(1 \leq m\leq 100\),\(1 \leq k \leq 10^7\),\(1 \leq u, v \leq n\),\(1 \leq w \leq 10^4\)。
算法描述
点分治,又名淀粉质,是计算树上路径问题的算法,与树剖不同的是,它计算的是对于整棵树的所有路径的情况,树剖难以完成。此题有\(m \leq 100\)个询问,我们考虑每一条路径,发现当我们枚举一个点\(x\)时,一条路径要么是经过\(x\)的,要么是与\(x\)不相交的。对于那些与x不相交的路径,我们可以向下分治来讨论。
(相关资料图)
我们发现,对于过x,但是同时经过x的父亲的路径,在\(x\)的父亲一层会考虑,所以我们只讨论\(x\)的子树以内的路径,遍历每一棵\(x\)的子树(直接连接的儿子),计算子树中每一个数到\(x\)的距离\(dis\),将它们推进一个桶\(judge\)中,为了方便处理,我们将这个子树的点的\(dis\)在遍历时推进一个队列,我们扫描队列中的每个元素,如果\(judge[k_i - dis]\)是存在的,那么说明存在一条长为\(k\)的路径,从\(x\)先前的子树向上到\(x\),再向下转到当前子树中的点,这个询问就有答案,鉴于询问数\(m \leq 100\),直接枚举每个\(k_i\),然后用\(O(1)\)判断每个\(k_i\)是否可以成立即可(这个地方开桶有一种空间换时间的思想)。对于每次清空\(judge\)数组,不能直接memset,要记录你更改了哪些值,再改回去就好了。
这是计算(calc)函数:
inline void calc(int x){ top = 0; for(int i = head[x];i;i = e[i].next) { int to = e[i].v; if(vis[to]) continue; dis[to] = e[i].w; rem[0] = 0;//rem[0]是计数器,rem是队列 getdis(to,x); for(int j = 1;j <= rem[0];j++) for(int k = 1;k <= m;k++) if(query[k] - rem[j] >= 0) if(judge[query[k] - rem[j]] == 1) rt[k] = 1; for(int j = 1;j <= rem[0];j++) if(rem[j] <= T) q[++top] = rem[j],judge[rem[j]] = 1; } for(int i = 1;i <= top;i++) judge[q[i]] = 0;}
时间复杂度\(O(nm\ logn)\)
讲解视频:https://www.bilibili.com/video/BV1GJ411x7h7
上条链不久被卡死了qwq
这里需要打破传统的树形问题的遍历顺序,而是每次处理一棵子树时,以这棵子树的重心为根进行处理,这样就能保证把子树切开后,大小一定会小于原来的\(\frac 12\),所以就能保证复杂度严格,但是遍历顺序改变了,所以遍历过的点要将一个\(vis\)标签打为1,在所有函数的遍历中,如果\(vis_{son} = 1\),就不访问\(son\)。
找重心部分:(一个点为根子树大小的最大值最小)
inline void dfs(int x,int last){siz[x] = 1;int now = 0;for(int i = head[x];i;i = e[i].next){int to = e[i].v;if(to == last || vis[to]) continue;dfs(to,x);siz[x] += siz[to];now = max(now,siz[to]);}now = max(now,sum - siz[x]);if(now < Minsiz) Minsiz = now,root = x;}
注意到一个细节:函数里面的“整棵树大小”用了一个\(sum\)变量,是因为每一次在子树中递归时总大小不一样,因为这次是确定了以x为根,下一次进入到儿子\(son\)中,就可以直接用\(siz_{son}\)作为\(sum\)。由于以\(son\)为根dfs时只会改变\(son\)子树的\(siz\),所以对于\(x\)的其他子树没有影响。
Code
#includeusing namespace std;const int N = 1e5 + 5,T = 1e7 + 5;struct Edge{int v,w,next;}e[N * 5];int head[N],n,m,vis[N],dis[N],query[N],judge[N * 100],rt[N],siz[N],rem[N],root = 0,Minsiz = 0x3f3f3f3f,tot = 0,sum,q[N],top = 0;inline void add(int x,int y,int z){++tot;e[tot].v = y;e[tot].w = z;e[tot].next = head[x];head[x] = tot;}inline void dfs(int x,int last){siz[x] = 1;int now = 0;for(int i = head[x];i;i = e[i].next){int to = e[i].v;if(to == last || vis[to]) continue;dfs(to,x);siz[x] += siz[to];now = max(now,siz[to]);}now = max(now,sum - siz[x]);if(now < Minsiz) Minsiz = now,root = x;}inline void getdis(int x,int last){rem[++rem[0]] = dis[x];for(int i = head[x];i;i = e[i].next){int to = e[i].v;if(to == last || vis[to]) continue;dis[to] = dis[x] + e[i].w;getdis(to,x);}}inline void calc(int x){top = 0;for(int i = head[x];i;i = e[i].next){int to = e[i].v;if(vis[to]) continue;dis[to] = e[i].w;rem[0] = 0;getdis(to,x);for(int j = 1;j <= rem[0];j++)for(int k = 1;k <= m;k++)if(query[k] - rem[j] >= 0)if(judge[query[k] - rem[j]] == 1)rt[k] = 1;for(int j = 1;j <= rem[0];j++)if(rem[j] <= T)q[++top] = rem[j],judge[rem[j]] = 1;}for(int i = 1;i <= top;i++) judge[q[i]] = 0;}inline void solve(int x){judge[0] = 1;vis[x] = 1;calc(x);for(int i = head[x];i;i = e[i].next){int to = e[i].v;if(vis[to]) continue;sum = siz[to];Minsiz = 0x3f3f3f3f;dfs(to,0);solve(root);}}int main(){memset(siz,0,sizeof(siz));int x,y,z;cin>>n>>m;for(int i = 1;i <= n - 1;i++){cin>>x>>y>>z;add(x,y,z);add(y,x,z);}for(int i = 1;i <= m;i++) cin>>query[i];sum = n;dfs(1,0);memset(judge,0,sizeof(judge));memset(rt,0,sizeof(rt));memset(vis,0,sizeof(vis));solve(root);for(int i = 1;i <= m;i++)if(rt[i])cout<<"AYE"<
关键词:
-
全球视讯!学系统集成项目管理工程师(中项)系列07_信息(文档)管理
1 & 160;信息系统相关信息(文档)1 1 & 160;是指某种数据媒体和其中所记录的数据1 2 & 160;永久性1 3 & 16
来源: 全球热讯:FirewallD入门手册
2023.4.21【图论】点分治|世界新视野
全球视讯!学系统集成项目管理工程师(中项)系列07_信息(文档)管理
小米辣椒的腌制方法放一年都不坏?_新消息
看到洋人吃冰激凌,这样的场景应该珍惜
今日播报!宝马MINI称两名女生不是公司员工 不会再出现:回应求原谅 你还会买吗?
世界焦点!内地票房破2亿!《灌篮高手》登顶淘宝热搜:周边被抢空
三方签约共建华侨大学国家语言服务出口基地 今日报
买到烂尾楼“钱房两空”?最高法明确优先保护购房者权益|每日资讯
世界看点:面对特斯拉掀起的价格战,有“勇士”选择应战,有“逆行者”坚持高端
电脑c盘怎么除了系统其他文删除件_怎样清理c盘除了系统之外的东西
天天快看:张小泉客服回应菜刀拍蒜断两截:比较硬的刀就容易断裂
解决信号盲区!曝小米Civi 3支持5G异网漫游:光明正大“蹭”网 当前关注
环球最资讯丨10倍提升 安卓新旗舰放弃祖传USB2.0:体验变化太明显了
网上的那些喷子 为啥一玩这类游戏就闭嘴了?-全球热点评
热门:i7处理器32GB+1TB仅2999 这款性价比神机只有巴掌大小
潍坊开展“10+”行动 助力工业经济高质量发展 天天新消息
新能源产品集结,长安加速向全球企业转型 当前快播
英国宣布制裁5名俄公民,梅德韦杰夫回应:英国是俄罗斯永远的敌人
华仁物业2022年净利636.57万元,同比减少34.7%|年报
千的组词_关于千的组词
六张iPad绘制的交通卡卡面 是苹果联合创作者为世界地球日送上的绿色礼物_微动态
潭村站_关于潭村站介绍-世界热议
山西一妈妈为催婚给25岁儿子床头摆稻草人 不料小伙儿人间清醒,反告诫勿迷信 环球热门
青春无价 《灌篮高手》首日即破12项纪录!
世界新资讯:马斯克称特斯拉今年将推出全自动驾驶技术
蚌埠:马天奇带队赴长三角地区考察招商 当前速读
黄辣丁和乌鱼能一起养吗 黄辣丁和乌鱼能不能养在一起呢 环球关注
郑州公积金可以取现吗?提取的条件有哪些?-全球简讯
全球今头条!中国恒大:预计无法于4月30日前披露2022年度审计报告及2022年公司债券年度报告
每日简讯:可以骑的行李箱、机械臂咖啡机……广交会创新产品引关注 参展企业订单增加
天天观点:萤石“小步快走”,跨进智能家居生态圈
每日观察!宝马半个董事会败给了一个冰淇淋
打字高手电脑版下载安装_打字高手电脑版 速讯
小米13 Ultra首销火爆!很多小米11/12S Ultra老用户以旧换新
预售价109.8万元!比亚迪仰望U8的价格还是太保守了
电商开始制裁“偷盘哥”:敢仅退款就法院见
人民网评:“五个一百”,传递正能量、传播真善美 全球百事通
有稜有角打一字_有稜有角是什么生肖
iOS 屏幕旋转的设置方法
又是浪费时间的一天-ssh的安装之路
全球时讯:Java中处理高精度数据计算
一季度我国承接RCEP成员国离岸服务外包执行额同比增长34.3%
长盈通2022年度分配预案:拟10送转3股派5元|焦点快看
当前速递!智能建筑工程技术丛书信息网络工程_对于智能建筑工程技术丛书信息网络工程简单介绍
当前热文:全球最赚钱手游!《王者荣耀》3月吸金14.7亿元
国产闪存、内存受阻 韩国三星、海力士赚到了:份额还能涨 环球速看
库里:我们全队都知道今晚再输的后果 没人想去感受那种感觉 热讯
保时捷:我们和中国车没什么可争的
不能忍 用户质疑微软:自己花钱买的Win系统 凭啥加广告
全球新资讯:曾高喊刹车失灵!车顶维权女车主现身上海车展:特斯拉若参展必不放过
搭载谷歌TV的索尼BRAVIAX80L电视在市场推出 天天新动态
世界新消息丨AT_abc297_e 题解
anaconda / conda 环境复制和迁移
window下cmd显示乱码
关于Nginx作为http-web服务器时对404错误页面的配置-以及安全加固-隐藏404的状态码
【财经分析】30年期国债期货首日交易平稳 助力打造长期稳定投融资生态
4月21日地热能板块跌幅达2%-焦点热讯
7999元 宏碁发布新款44.5英寸带鱼屏显示器:165Hz 2K屏
DC宇宙重启!电影《闪电侠》中国内地定档:6月16日上映
重点聚焦!上市5年 8TB机械盘价格终于跌破700元:牙膏挤爆了
新消息丨对话理想汽车总裁:造纯电 理想到底有多“抠”?
销量跌出前15后不指望中国市场!机构称韩国现代将在2026年成全球第一大车企
世界通讯!周鸿祎内部信:360员工不会被GPT淘汰,鼓励使用GPT拿绩效
003CCE Turbo配置容器网卡动态预热|焦点速看
Nvidia GPU Virtual Memory Management
成都燃气:2022年度净利润约4.92亿元 同比增加0.57%
焦点精选!债市日报:4月21日
环球速讯:一批“色狼”被官方公布,罚了!
6299元起!魅族20 INFINITY无界版入网:双向卫星通信比苹果更强
朱一龙、倪妮亮相北影节开幕红毯:新电影《消失的她》即将上映
青岛一鸵鸟在车流中狂奔引骚乱:当天就被抓回
冰淇淋事件闹大 有车主扣掉车标“宝马”二字 称感觉羞愧
F-150纯电皮卡充电时起火 三辆新车惨烈烧毁!福特:韩国电池的锅
初三英语听力训练技巧_初三英语听力训练 全球滚动
联动长三角,走进马鞍山!浦东历史博物馆首次实现展览走出去
每一磅碎牛肉使用多少预制炸玉米饼调味料?-天天短讯
劝人写码,千刀万剐——“前端已死”难道要成真了?|世界快报
【新华解读】外资3月持有人民币债券规模回升 外资有望享受更多政策红利 播资讯
山西一妈妈为催婚给25岁儿子床头摆稻草人:神回应看醉
天天简讯:沃尔沃新车轮胎5个螺丝少4个 女车主崩溃要退车
女子吐槽软卧车厢分配3男1女 12306回应:可找工作人员调换
目前适配最完美的小折叠!vivo X Flip评测:超好看超能打|世界观焦点
环球快资讯丨三星S23 Ultra用户入手小米13 Ultra:拿它当相机来用
贵州大方:樱桃产销两旺,果农笑迎丰收_焦点热文
看热讯:电脑如何改成光盘启动项-(电脑如何改成光盘启动项设置)
全球即时看!深圳二手房房贷与参考价解绑?深圳多家银行:目前根据评估价放贷
MySQL Execution Plan--DISTINCT语句优化
Python函数与码复用
Appuploader安装指南
全志Uboot fdt修改DTS进行临时调试的方法
热门看点:ReactNative 打包发布 Android 应用
世界实时:BBBA德系“四兄弟”组合解散!宝沃中国申请破产
夏季必备:GLM夏季薄款七分/九分/长裤34.9元新低抄底
鸿星尔克请网友吃冰淇淋 获赞大气!宝马MINI感受下 环球消息
半年内5名机车网红车祸身亡 又见两只脚够不着地女骑:大货身旁疾驰
刘慈欣在联合国被“催更”:当年奥巴马连发两封邮件要新书 环球短讯
它强任它强,驾控随我心,斯巴鲁Crosstrek全新上市!
全球速看:打好软件国产化攻坚战,闪信科技面向人工智能和数字经济进行新一代升级
【快播报】DRF的权限组件(源码分析)