提交时间:2024-11-14 15:42:16
运行 ID: 34786
#include<bits/stdc++.h> #define ll long long using namespace std; int n,q; ll x[3005],y[3005]; inline ll calc(int a,int b){ return abs(x[a]-x[b])*(x[a]-x[b])*(x[a]-x[b])+abs(y[a]-y[b])*(y[a]-y[b])*(y[a]-y[b]); } template<typename T> inline void read(T &x){ x=0; bool f=0; char c=getchar(); while(!isdigit(c)){if(c=='-')f=1;c=getchar();} while(isdigit(c))x=x*10+c-'0',c=getchar(); if(f)x=-x; } const int mxm=5e6; bool lz[mxm]; int fa[mxm],ch[mxm][2],id[mxm]; ll vl[mxm],mx[mxm]; void pu(int x){ mx[x]=vl[x],id[x]=x; if(mx[ch[x][0]]>mx[x])mx[x]=mx[ch[x][0]],id[x]=id[ch[x][0]]; if(mx[ch[x][1]]>mx[x])mx[x]=mx[ch[x][1]],id[x]=id[ch[x][1]]; return; } void tr(int x){ swap(ch[x][0],ch[x][1]); lz[x]^=1; return; } void pd(int x){ if(!lz[x])return; if(ch[x][0])tr(ch[x][0]); if(ch[x][1])tr(ch[x][1]); lz[x]=0; return; } bool nr(int x){ return ch[fa[x]][0]==x||ch[fa[x]][1]==x; } bool get(int x){ return ch[fa[x]][1]==x; } void rot(int x){ int y=fa[x],z=fa[y],c=get(x); if(nr(y))ch[z][get(y)]=x; fa[x]=z; ch[y][c]=ch[x][!c]; if(ch[x][!c])fa[ch[x][!c]]=y; ch[x][!c]=y; fa[y]=x; pu(y); pu(x); return; } void upd(int x){ if(nr(x))upd(fa[x]); pd(x); return; } void splay(int x){ upd(x); for(int f=fa[x];nr(x);rot(x),f=fa[x]) if(nr(f))rot(get(x)==get(f)?f:x); return; } int acs(int x){ int p=0; for(;x;p=x,x=fa[p]){ splay(x),ch[x][1]=p,pu(x); } return p; } void mkr(int x){ acs(x),splay(x),tr(x); return; } int fr(int x){ acs(x),splay(x),pd(x); while(ch[x][0])x=ch[x][0],pd(x); return splay(x),x; } void split(int x,int y){ mkr(x),acs(y),splay(y); return; } void link(int x,int y){ mkr(x); if(fr(y)!=x)fa[x]=y; return; } bool chk(int x,int y){ return fr(x)==fr(y); } int cnt=0; signed main(){ //freopen("slpjbh.out","r",stdin); //freopen("slpjbh.in","w",stdout); read(n),read(q); for(int i=1;i<=n;i++)read(x[i]),read(y[i]); ll ans=0; int tot=n; for(int i=1;i<=n;i++){ for(int j=i+1;j<=n;j++){ ll w=calc(i,j); vl[++tot]=w; if(!chk(i,j)){ ans+=w; link(i,tot); link(j,tot); continue; } split(i,j);int p=id[j]; if(mx[j]<=w){ continue; } ans=ans-mx[j]+w; splay(p); fa[ch[p][0]]=fa[ch[p][1]]=0; link(i,tot),link(j,tot); } } printf("%lld\n",ans); for(int i=1;i<=q;i++){ ll a,b,c; read(a),read(b),read(c); split(a,b);int p=id[b]; if(mx[b]<=c){ cout<<ans<<endl; continue; } ans=ans-mx[b]+c; splay(p); fa[ch[p][0]]=fa[ch[p][1]]=0; vl[++tot]=c; link(a,tot),link(b,tot); cout<<ans<<endl; } return 0; }