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

P8428 [COI 2020] Pastiri 题解 / 树上覆盖经典贪心

题面传送门:P8428 [COI 2020] Pastiri。

首先树上覆盖有个经典贪心,每次找到最深的点并找到可覆盖它最浅的祖先覆盖,感性理解一下,由于这是最深的点,没有更深的点,因此兄弟子树显然不优,而找最浅祖先可以覆盖更多的点。

那么我们对每个羊按照深度大到小排序,然后找到能覆盖这个羊的最浅祖先,然后将这个点能覆盖的其它羊标记了,下次无需考虑。

如果这样暴力做是 \(O(n^2)\) 的,考虑优化。

考虑计算每个点到最近的羊的距离记为 \(d\),然后爬祖先时直接判断 \(d_{fa_u}= d_u +1\) 即可,至于覆盖其他羊,直接 dfs 即可,显然走过的点不会重复走,因此均摊是对的。

至于如何求每个点到最近的羊的距离,多源最短路即可,使用 bfs 实现。

#include<bits/stdc++.h>
#define int long long
#define double long double
using namespace std;
const int N=5e5+10; 
inline int read(){char c=getchar();int f=1,ans=0;while(c<48||c>57) f=(c==45?f=-1:1),c=getchar();while(c>=48&&c<=57) ans=(ans<<1)+(ans<<3)+(c^48),c=getchar();return ans*f;
}
vector<int>g[N];
int n,k,a[N];
int dep[N],fa[N];
void dfs(int u,int fa){::fa[u]=fa,dep[u]=dep[fa]+1;for (auto v:g[u]) if (v^fa) dfs(v,u);
}
int d[N],vis[N];
inline void bfs(){memset(d,0x3f,sizeof(d));queue<int>q;for (int i=1;i<=n;i++) q.push(a[i]),d[a[i]]=0;while(!q.empty()){int u=q.front();q.pop();if (vis[u]) continue;vis[u]=1;for (auto v:g[u]) if (d[v]>d[u]+1) d[v]=d[u]+1,q.push(v);}
}
inline bool cmp(int x,int y){return dep[x]>dep[y];}
void dfs1(int u,int x){vis[u]=1; for (auto v:g[u]) if (!vis[v]&&d[v]==x-1) dfs1(v,x-1);
}
main(){n=read(),k=read();for (int i=1,u,v;i<n;i++) u=read(),v=read(),g[u].push_back(v),g[v].push_back(u);for (int i=1;i<=k;i++) a[i]=read();dfs(1,0);sort(a+1,a+k+1,cmp);bfs();memset(vis,0,sizeof(vis));vector<int>anss;for (int i=1;i<=k;i++) if (!vis[a[i]]){int x=a[i],y=a[i];while(fa[y]&&d[fa[y]]==d[y]+1) y=fa[y];dfs1(y,dep[x]-dep[y]);anss.push_back(y); }printf("%lld\n",(int)anss.size());for (auto i:anss) printf("%lld ",i);return 0;
}
http://www.jsqmd.com/news/298828/

相关文章:

  • dvwa靶场详细通关教程三(CSRF跨站请求伪造)
  • 详细介绍:MLOps 的CI/CD VS DevOps 的CI/CD
  • 2026年合肥东辰职业学校推荐,合肥东辰职业学校教研成果多吗?
  • 说说浙江办公家具生产企业价格,合理之选在这里
  • 盘点更值得选的防爆润滑油泵厂家,宁波迪奥机械口碑佳
  • 2026年推荐的贫瘦煤厂家盘点,选哪家更靠谱?
  • 2026年连续镀靠谱厂家排行榜,快来了解一下
  • 2026年精密机械慢走丝十大品牌公布,上海汉霸数控口碑如何?
  • 关于“浔川社团福利发放活动疑似存在风险”消息回应公告
  • 基于单片机的机房环境监测系统设计与实现
  • 春熙路火锅评测:本地人常去的成都火锅品牌盘点,川渝火锅/老火锅/火锅店/特色美食/重庆火锅/火锅,成都火锅品牌口碑推荐
  • 这精神状态期末能及格吗。
  • 深入解析:KGGEN: 用语言模型从纯文本中提取知识图
  • Npm
  • Flutter实战:从零实现俄罗斯方块(一)数据结构与核心算法
  • Flutter实战:从零实现俄罗斯方块(三)交互控制与事件处理
  • 基于单片机的模拟量检测与限值报警系统设计
  • 【计算机毕业设计案例】基于springboot的日用品销售系统基于springboot+vue的日用品销售系统设计与实现(程序+文档+讲解+定制)
  • 西门子1200模板:三轴机械手联动控制及结构化编程实现案例
  • 【计算机毕业设计案例】基于springboot的挂号就诊管理系统社区诊所在线挂号与排队系统(程序+文档+讲解+定制)
  • Hudi Flink 集成分析
  • Excel CHAR函数实战:从自动换行到特殊符号,这些技巧让效率翻倍
  • 2026年细聊合肥东辰职业学校,其奖学金政策如何你了解吗
  • 2026年安徽办公家具品牌制造商排名Top10
  • 升降平台生产厂哪家合作案例多的排名情况
  • 2026气肥煤值得推荐的厂家,新疆硕华金腾等品牌口碑佳!
  • 2026年江苏连续镀信誉良好厂家推荐,选哪家更靠谱?
  • 解读哪个电加热导热油炉生产厂性价比高,排名给你参考
  • 升降平台哪个厂商价格合适,固佳工业设备令人放心
  • 炭黑分散度测试仪制造企业哪家性价比高,汇诚仪器是优选