比赛 |
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;
}