比赛 9.27练习赛 评测结果 AAATTAAATTTTTTTTTTTT
题目名称 幻想乡战略游戏 最终得分 30
用户昵称 健康铀 运行时间 102.519 s
代码语言 C++ 内存使用 34.49 MiB
提交时间 2024-09-27 21:09:46
显示代码纯文本
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int N=1e6+5;
ll n,m;
struct node{ll v,w;};
vector<node>g[N];
ll sz[N],fa[N],val[N],dep[N],ans=0;
void dfs(ll u,ll f){
	fa[u]=f;
	for(int i=0;i<g[u].size();i++){
		ll v=g[u][i].v,w=g[u][i].w;if(v==f)continue;
		dep[v]=dep[u]+w;dfs(v,u);
	}
}
ll query(){
	ll u=1,genshin=ans,lst=0;
	while(1){
		ll minn=0,id;
		for(int i=0;i<g[u].size();i++){
			ll v=g[u][i].v,w=g[u][i].w;
			if(v==lst)continue;
			ll tmp=sz[1]*w-sz[v]*2*w;
			if(tmp<minn){
				minn=tmp;
				id=v;
			}
		}
		if(minn>=0)break;
		lst=u;u=id;genshin+=minn;
	}
	return genshin;
}
int main(){
	freopen("zjoi15_tree.in","r",stdin);
	freopen("zjoi15_tree.out","w",stdout);
	//黄笑凡玩原神 
	ios::sync_with_stdio(0);cin.tie(0);cout.tie(0);
	cin>>n>>m;
	for(int i=1;i<n;i++){
		ll u,v,w;cin>>u>>v>>w;
		g[u].push_back({v,w});
		g[v].push_back({u,w});
	}
	dfs(1,0);
	while(m--){
		ll u,c;cin>>u>>c;
		ll x=u;val[u]+=c;ans+=dep[u]*c;
		while(x){sz[x]+=c;x=fa[x];}
		cout<<query()<<endl;
	}
	return 0;
}