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

P8990 [北大集训 2021] 小明的树

神题。

考虑刻画题目中的条件,树是 “美丽的” 等价于未点亮的点形成的连通块数 \(=1\),树上容易转化为 未点亮点数 - 两端点均未点亮边数。而计数点亮连通块数也一样可以转化,但还有一种方式是将每一棵点亮子树的贡献视为其根到父亲的连边,也就是两端点异色的边数。

对每个时间计数,这个数据范围必定是要以时间维维护数据结构。

考虑加减边的影响。对于边 \((u,v),t_u<t_v\),其中 \(t_i\) 为点 \(i\) 点亮的时间。则等价于 \([1,t_u)\) 对两边均未点亮的边数贡献 \(1\)\([t_u,t_v)\) 对两端点异色的边数贡献 \(1\)。特别的,\(t_1=n\)

而所有时刻权值和相当于所有全局最小值时间对应的权值之和。(最小值即最小未点亮连通块数,权值即异色边数)。

断边则反贡献一遍即可。

Takanashi Rikka
// Problem: P8990 [北大集训 2021] 小明的树
// Contest: Luogu
// URL: https://www.luogu.com.cn/problem/P8990
// Memory Limit: 512 MB
// Time Limit: 3000 ms
// 
// Powered by CP Editor (https://cpeditor.org)#include<bits/stdc++.h>
using namespace std;
#define fin(x) freopen(#x".in","r",stdin)
#define fout(x) freopen(#x".out","w",stdout)
#define fr(x) fin(x),fout(x);
#define Fr(x,y) fin(x),fout(y)
#define INPUT(_1,_2,FILE,...) FILE
#define IO(...) INPUT(__VA_ARGS__,Fr,fr)(__VA_ARGS__)
#define pb push_back
#define ll long long
#define pii pair<int,int>
#define mp make_pair
#define intz(x,z) memset((x),(z),sizeof((x)))
#define cfast ios::sync_with_stdio(false);cin.tie(0),cout.tie(0)
inline ll lowbit(ll x){return x&-x;}
#define fi first
#define se second
inline void cmx(auto &x,ll y){if(y>x)x=y;}
inline void cmn(auto &x,ll y){if(y<x)x=y;}
const int N=5e5+5;
int n,m,p[N],u[N],v[N];
struct node{int l,r,mn,c,x,laz,lazt;}t[N<<2];
void build(int u,int l,int r){t[u]={l,r,n-l,1,0,0,0};if(l==r)return;int mid=l+r>>1;build(u<<1,l,mid),build(u<<1|1,mid+1,r);
}
inline  void MIN(int u,int x){t[u].mn+=x,t[u].lazt+=x;}
inline void add(int u,int x){t[u].x+=x*t[u].c,t[u].laz+=x;}
inline void pd(int u){add(u<<1,t[u].laz),add(u<<1|1,t[u].laz),t[u].laz=0;MIN(u<<1,t[u].lazt),MIN(u<<1|1,t[u].lazt),t[u].lazt=0;
}
inline void pushup(int u){t[u].mn=min(t[u<<1].mn,t[u<<1|1].mn);bool x=(t[u<<1].mn==t[u].mn),y=(t[u<<1|1].mn==t[u].mn);t[u].c=x*t[u<<1].c+y*t[u<<1|1].c,t[u].x=x*t[u<<1].x+y*t[u<<1|1].x;
}
void upd(int u,int l,int r,int x){if(l>r)return;if(t[u].l>=l&&t[u].r<=r)return add(u,x);int mid=t[u].l+t[u].r>>1;pd(u);if(l<=mid)upd(u<<1,l,r,x);if(r>mid)upd(u<<1|1,l,r,x);pushup(u);
}
void update(int u,int l,int r,int x){if(l>r)return;if(t[u].l>=l&&t[u].r<=r)return MIN(u,x);int mid=t[u].l+t[u].r>>1;pd(u);if(l<=mid)update(u<<1,l,r,x);if(r>mid)update(u<<1|1,l,r,x);pushup(u);
}
void ins(int u,int v){int x=p[u],y=p[v];if(x>y)swap(x,y);update(1,1,x-1,-1),upd(1,x,y-1,1);
}
void del(int u,int v){int x=p[u],y=p[v];if(x>y)swap(x,y);update(1,1,x-1,1),upd(1,x,y-1,-1);
}
void UesugiErii(){cin>>n>>m;for(int i=1;i<n;i++)cin>>u[i]>>v[i];for(int i=1,x;i<n;i++)cin>>x,p[x]=i;p[1]=n;build(1,1,n-1);for(int i=1;i<n;i++)ins(u[i],v[i]);cout<<t[1].x<<'\n';while(m--){int x,y,u,v;cin>>x>>y>>u>>v;del(x,y),ins(u,v);cout<<t[1].x<<'\n';}
}
signed main(){cfast;int _=1;//cin>>_;for(;_;_--)UesugiErii();return 0;
}
http://www.jsqmd.com/news/135091/

相关文章:

  • 如何通过 GPU 增强 Pandas
  • 2025浙江艺考培训机构排行榜 - 优质品牌商家
  • 2025浙江艺考培训机构排行榜 - 优质品牌商家
  • 2025年山东大学计算机考研复试机试真题(附 AC 代码 + 解题思路)
  • 专注RFID读写器,万全智能的20年深耕之路 - 品致汇
  • 基于Java的高校科研项目管理网站的设计与实现开题报告
  • 基于 YOLOv8 的交通标识与设施识别系统(含完整源码)
  • 2025年12月四川成都市政管道、波纹管、骨架管、给水管、电力管厂家竞争格局深度分析报告 - 2025年品牌推荐榜
  • 2025年12月四川成都市政管道、波纹管、骨架管、给水管、电力管厂家竞争格局深度分析报告 - 2025年品牌推荐榜
  • 根据用户标识使用Java 8引入的流(Streams)API进行分组为Map<String, List<TUserAuthorize>>
  • 能帮老人联系子女的养老机器人推荐:视频通话、安全守护全解析 - 资讯焦点
  • 能帮老人联系子女的养老机器人推荐:视频通话、安全守护全解析 - 资讯焦点
  • 2025年12月优秀工位系统服务商推荐榜:访客系统服务商、访客系统订研发公司、会议预约系统定制、会议预约系统服务商、会议预约系统研发公司 - 优质品牌商家
  • 2025 年生产管理系统 TOP5 榜单 - 企业数字化观察家
  • 你的Git提交记录是“代码史诗”,还是“只有上帝能看懂的天书”?
  • 基于 YOLOv8 的驾驶员疲劳状态识别系统实战(含完整源码与可视化界面)
  • 2025 年生产管理系统 TOP5 榜单 - 企业数字化观察家
  • 2025年读写器选购指南:国内外主流RFID读写器深度测评 - 品致汇
  • 2025年读写器选购指南:国内外主流RFID读写器深度测评 - 品致汇
  • 如何为神经网络的输出编码约束
  • 基于SSM的学科竞赛全流程管理系统的设计与实现
  • 2026主管护师考试培训机构哪个靠谱?上岸考生推荐这家 - 资讯焦点
  • 2025自考必备8个降AI率工具测评榜单
  • “平台工程”救火实录:我如何让“祖传项目”3分钟上线?
  • 《离散数学命题逻辑 等值式 推理定律(理解 + 规范 + 速记统一版)》
  • 狭窄走廊也能通过!养老机器人导航技术全解析,猎户星空豹小秘mini底盘仅55cm - 资讯焦点
  • AI训练图片、视频、数据集素材供应商推荐:卓特视觉数据训练专家 - 品牌2026
  • AI训练图片、视频、数据集素材供应商推荐:卓特视觉数据训练专家 - 品牌2026
  • [INTERCONNECT] Oscilloscope (OSC)
  • 国产数据库之华为高斯GaussDB数据库培训(openGauss、TPOPS、DWS)