传智杯#5练习赛_树的变迁
admin
2024-02-10 18:42:54
0

链接

  • 点此跳转

思路

考察知识点:并查集。

题目描述

给定一棵具有 nnn 个节点的树,每个节点有一个初始权值 aia_iai​。

一共需要进行 mmm 次操作,每次操作包括:

  • 1 e 编号为 eee 的边突然消失,使得它所在的那棵树变成了两棵树。

  • 2 u val 编号为 uuu 的节点的权值变成了 valvalval。

  • 3 u 进行了一次查询,查询 uuu 所在的那棵树的权值之和。

现在你需要来模拟上述事件,以了解树的变迁。

分析

由于查询是一棵树的权值之和,可以考虑使用并查集维护一个连通块的权值之和。

首先读入所有边,然后读入所有操作,将操作存起来。

如果操作是删除某个边,将该边标记,进行并查集合并时,不使用这条边。

然后倒序遍历操作:

  • 如果是删除边,将两点所在并查集合并。
  • 如果是查询,直接查询祖宗节点,将祖宗节点的存的权值之和加入答案。
  • 如果是将点赋值。首先查询该点的根节点,然后取出该点上一次的值,然后在权值之和减去该点两次值的差。

AC代码

// #pragma GCC opimize(3)
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
// #include 
// #include 
#define endl '\n'
#define x first
#define y second
#define fi first
#define se second
#define PI acos(-1)
// #define PI 3.1415926
#define LL long long
#define INF 0x3f3f3f3f
#define lowbit(x) (-x&x)
#define PII pair
#define ULL unsigned long long
#define PIL pair
#define all(x) x.begin(), x.end()
#define mem(a, b) memset(a, b, sizeof a)
#define rev(x) reverse(x.begin(), x.end())
#define IOS ios::sync_with_stdio(false),cin.tie(0),cout.tie(0)using namespace std;const int N = 1e5 + 10;struct Edge {int u, v;bool st;
}edges[N];struct opion {int op, u;
}ops[N];int p[N], sum[N];
int n, m;
vector last[N], ans;int find(int x) {if (x == p[x]) return x;return p[x] = find(p[x]);
}void merge(int a, int b) {int pa = find(a), pb = find(b);if (pa != pb) {p[pa] = pb;sum[pb] += sum[pa];sum[pa] = 0;}
}void solve() {cin >> n >> m;for (int i = 1; i <= n; i ++ ) {int val; cin >> val;last[i].push_back(val);sum[i] = val, p[i] = i;}for (int i = 1; i < n; i ++ ) {int u, v;cin >> u >> v;edges[i] = {u, v, true};}for (int i = 1; i <= m; i ++ ) {int op, u, val;cin >> op >> u;if (op == 1){edges[u].st = false;} else if (op == 2) {cin >> val;last[u].push_back(val);sum[u] = val;}ops[i] = {op, u};}for (int i = 1; i < n; i ++ ) {Edge e = edges[i];if (e.st) merge(e.u, e.v);}for (int i = m; i > 0; i -- ) {int op = ops[i].op, u = ops[i].u;if (op == 1) {int a = edges[u].u, b = edges[u].v;merge(a, b);} else if (op == 2) {int won = last[u].back();last[u].pop_back();int now = last[u].back();sum[find(u)] += now - won;} else if (op == 3) {ans.push_back(sum[find(u)]);}}rev(ans);for (int it : ans) cout << it << endl;
}int main() {IOS;solve();return 0;
}

相关内容

热门资讯

特朗普的“中选经济强心针”:超... 美国消费者即将迎来一场规模空前的“现金雨”。 据追风交易台,根据摩根士丹利1月23日发布的最新研报,...
2025年IPO数据报告-投中... 2025 年中国企业 IPO 市场呈现止跌回升态势,全球范围内 294 家中国企业成功上市,IPO ...
山西银行锚定未来战略定位和经营... 文 | 中国金融网(CFN) 黄瑾 2026年1月下旬,山西银行密集召开2026年度工作会议、202...
思林杰并购告吹背后:对价砍了又... 深圳商报·读创客户端记者 梁佳彤 1月25日,思林杰(688115)发布公告称,公司分别召开第二届...
原创 昨... 特朗普批评加拿大被中国“吞食”,称关税将征收100%并嘲讽其“州长”,暴露霸权主义虚伪。 昨晚,特...
威尔鑫点金·׀ 美元因烽火戏诸... 美元因烽火戏诸侯遭遇重锤 金银再续强势逼空 2026年01月25日 威尔鑫投资咨询研究中心 (文...
钻石的眼泪,白银的沉默:当克拉... 钻戒的浪漫,是一场昂贵的误会? 那颗闪闪发光的石头,承载了多少海誓山盟。你以为买下的是一份永恒,一份...
贾国龙最新发声!“将回归一线,... 据媒体报道,西贝餐饮集团创始人贾国龙近日接受专访时表示,将回归一线、聚焦主业,不再打造个人IP。 贾...
阿里“平头哥”上市猜想引关注背... 上海浦东新区张江人工智能产业园内,一座灰橙交融的建筑静静矗立,平头哥半导体有限公司(以下简称平头哥)...
利好!千亿龙头完成金矿收购! 本报记者 肖艳青 1月25日晚间,洛阳栾川钼业集团股份有限公司(以下简称“洛阳钼业”)公告称,公司于...
原创 短... 刘阿姨大约从一年前开始断断续续出现腹痛、便秘症状,开始她没有当回事,觉得是胃肠道功能不好导致的,饮食...
旷达科技集团股份有限公司 第七... 证券代码:002516 证券简称:旷达科技 公告编号:2026-009 旷达科技集团股份有限公司 第...
原创 申... 离婚十三年,申通快递实控人被前夫追索分割财产。 作者 | 于婞 编辑丨高岩 来源 | 野马财经 19...
2025年业绩预亏!华神科技推... 继2024年净利出现亏损后,2025年,华神科技(000790)归属净利润预计同样出现亏损。在业绩连...
南宁吴圩国际机场将设立口岸进境... 近日,财政部、商务部、文化和旅游部、海关总署、税务总局联合印发《关于口岸进境免税店有关事宜的通知》(...
零食连锁商鸣鸣很忙港股IPO招... 观点网讯:1月25日,内地连锁零食商“零食很忙”及“赵一鸣零食”母企鸣鸣很忙(01768.HK)IP...
大普微注册生效:创业板包容性上... 创业板自设立以来,始终以“为高成长性的创新型、创业型企业提供专门的融资平台和发展舞台”为核心使命,其...
公司互动丨这些公司披露在电池等... 1月23日,多家上市公司通过互动平台、披露投资者关系活动记录表等渠道披露公司在电池等方面最新情况: ...
颠覆想象!阿里通义千问绝不仅是... 通义千问这套由阿里巴巴推出的AI大模型系列,已然成了全球领先的开源模型,它可不是单纯的聊天工具,而是...