已知RE位置求调
查看原帖
已知RE位置求调
349824
WsW_花逝爆零人楼主2025/1/18 01:23
#include<bits/stdc++.h>
using namespace std;
typedef pair<int,int> pii;
typedef long long ll;
typedef unsigned long long ull;
struct node{
	int opt,u,val;
}a[100003];
int n,m;
int v[100003];
set<int>s;
pii edg[100003];
int f[100003];
int cnt[100003];

stack<int>ans;
int find(int x){
	if(x!=f[x])f[x]=find(f[x]);
	return f[x];
}
int t(int a,int b){
	int fa=find(a),fb=find(b);
	cnt[fa]+=cnt[fb];
	f[fb]=fa;
}
int main(){
	ios::sync_with_stdio(0);
	cin.tie(0);cout.tie(0);
	cin>>n>>m;
	for(int i=1;i<=n;i++){
		cin>>v[i];
		f[i]=i;
	}
	for(int i=1;i<n;i++){
		cin>>edg[i].first>>edg[i].second;
	}
	for(int i=1;i<=m;i++){
		cin>>a[i].opt>>a[i].u;
		if(a[i].opt==1)s.insert(a[i].u);
		if(a[i].opt==2){
			a[i].val=v[a[i].u];
			cin>>v[a[i].u];
		}
	}
	for(int i=1;i<=n;i++)cnt[i]=v[i];
	for(int i=1;i<n;i++){
		if(s.find(i)==s.end()){
			t(edg[i].first,edg[i].second);//这里RE了
		}
	}
	for(int i=m;i>0;i--){
		if(a[i].opt==1){
			t(edg[a[i].u].first,edg[a[i].u].second);
		}
		if(a[i].opt==2){
			cnt[find(a[i].u)]+=a[i].val-v[a[i].u];
			v[a[i].u]=a[i].val;
		}
		if(a[i].opt==3){
			ans.push(cnt[find(a[i].u)]);
		}
	}
	while(!ans.empty()){
		cout<<ans.top()<<'\n';
		ans.pop();
	}
	return 0;
}
2025/1/18 01:23
加载中...