제출 #992555

#제출 시각아이디문제언어결과실행 시간메모리
992555AbitoPaths (RMI21_paths)C++17
36 / 100
679 ms1012 KiB
#include <bits/stdc++.h> #define F first #define S second #define pb push_back #define ppb pop_back #define ep insert #define endl '\n' #define elif else if #define pow pwr #define sqrt sqrtt //#define int long long #define ll long long #define y1 YONE typedef unsigned long long ull; using namespace std; const int N=2005; int n,k,tin[N],sz[N],par[N],t,v[N],tree[N],lx,rx; vector<pair<int,ll>> adj[N]; pair<ll,int> seg[4*N+5]; ll dis[N],lazy[4*N+5],val; bool vis[N]; void dfs(int x,int p){ par[x]=p; sz[x]=1; t++; tin[x]=t; tree[t]=x; for (auto u:adj[x]){ if (p==u.F) continue; v[u.F]=u.S; dis[u.F]=dis[x]+u.S; dfs(u.F,x); sz[x]+=sz[u.F]; }return; } void build(int x,int l,int r){ lazy[x]=0; if (l==r){ seg[x]={dis[tree[l]],tree[l]}; return; }int mid=(l+r)/2; build((x<<1),l,mid); build((x<<1)+1,mid+1,r); seg[x]=max(seg[(x<<1)],seg[(x<<1)+1]); return; } void push(int x){ seg[(x<<1)].F+=lazy[x]; seg[(x<<1)+1].F+=lazy[x]; lazy[(x<<1)]+=lazy[x]; lazy[(x<<1)+1]+=lazy[x]; lazy[x]=0; return; } void edit(int x,int l,int r){ if (l>rx || r<lx) return; if (l>=lx && r<=rx){ seg[x].F+=val; lazy[x]+=val; return; }int mid=(l+r)/2; push(x); edit((x<<1),l,mid); edit((x<<1)+1,mid+1,r); seg[x]=max(seg[(x<<1)],seg[(x<<1)+1]); return; } int32_t main(){ ios_base::sync_with_stdio(false);cin.tie(NULL);cout.tie(NULL); cin>>n>>k; for (int i=1;i<n;i++){ int x,y,w; cin>>x>>y>>w; adj[x].pb({y,w}); adj[y].pb({x,w}); }int l=0; for (int i=1;i<=n;i++) l+=bool(adj[i].size()==1); k=min(k,l); for (int i=1;i<=n;i++){ t=0;dis[i]=0;v[i]=0;par[i]=0; memset(vis,0,sizeof(vis)); dfs(i,0); build(1,1,n); ll ans=0; for (int kk=1;kk<=k;kk++){ int x=seg[1].S; //cout<<x<<' '; while (!vis[x] && x){ ans+=v[x]; lx=tin[x]; rx=tin[x]+sz[x]-1; val=-v[x]; if (v[x]) edit(1,1,n); v[x]=0; vis[x]=1; x=par[x]; } }cout<<ans<<endl; } return 0; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...