Submission #500171

# Submission time Handle Problem Language Result Execution time Memory
500171 2021-12-30T12:12:51 Z inksamurai Putovanje (COCI20_putovanje) C++17
110 / 110
180 ms 47008 KB
#include <bits/stdc++.h>
#define fi first
#define se second
#define pb push_back
#define sz(a) (ll)a.size()
#define all(a) a.begin(),a.end()
#define rep(i,n) for(ll i=0;i<n;i++)
#define crep(i,x,n) for(ll i=x;i<n;i++)
#define drep(i,n) for(ll i=n-1;i>=0;i--)
#define vec(...) vector<__VA_ARGS__>
#define _3qplfh5 ios_base::sync_with_stdio(false),cin.tie(0),cout.tie(0)
using namespace std;
typedef long long ll;
typedef long double ld;
using pii=pair<ll,ll>;
using vi=vector<ll>;
using vll=vector<long long>;


struct treelca{
	ll n;
	ll timer=0;
	vec(vi) adj;
	vi tin,tout,tour,tourid;
	vi segtree;
	vi depth;
	treelca(ll m,ll root,vec(vi) neadj){
		init(m,root,neadj);
	}
	void init(ll m,ll root,vec(vi) neadj){
		n=m;
		tin.clear();
		tout.clear();
		tour.clear();
		tourid.clear();
		depth.clear();
		tin.resize(n,0);
		tout.resize(n,0);
		tourid.resize(n,0);
		depth.resize(n,0);
		adj=neadj;
		dfs(root,-1);
		segtree.resize(4*sz(tour));
		build(1,0,sz(tour)-1);
	}
	void dfs(ll v,ll par){
		tour.pb(v);
		tourid[v]=sz(tour)-1;
		tin[v]=timer++;
		for(auto u : adj[v]){
			if(u==par) continue;
			depth[u]=depth[v]+1;
			dfs(u,v);
			tour.pb(v);
		}
		tout[v]=timer++;
	}
	void build(ll node,ll l,ll r){
		if(l==r){
			segtree[node]=tour[l];
		}else{
			ll m=(l+r)>>1;
			build(node*2,l,m);
			build(node*2+1,m+1,r);
			segtree[node]=(tin[segtree[node*2]]<tin[segtree[node*2+1]]?segtree[node*2]:segtree[node*2+1]);
		}
	}
	ll query(ll node,ll l,ll r,ll _l,ll _r){
		if(l>_r or r<_l) return -1;
		if(l>=_l and r<=_r) return segtree[node];
		ll m=(l+r)>>1;
		ll vl=query(node*2,l,m,_l,_r);
		ll vr=query(node*2+1,m+1,r,_l,_r);
		if(min(vl,vr)==-1) return max(vl,vr);
		return (tin[vl]<tin[vr]?vl:vr);
	}
	ll ancestor(ll from,ll to){
		ll tinfrom=tin[from],tllo=tin[to];
		if(tinfrom>tllo) swap(tinfrom,tllo);
		return query(1,0,sz(tour)-1,tinfrom,tllo);
	}
	ll dist(ll u,ll v){
		return depth[u]+depth[v]-depth[ancestor(u,v)]*2;
	}
};

int main(){
_3qplfh5;
	ll n;
	cin>>n;
	vec(vec(pii)) adj(n);
	vec(pii) edgecost(n);
	vec(vi) gadj(n);
	rep(i,n-1){
		ll u,v,c1,c2;
		cin>>u>>v>>c1>>c2;
		u--,v--;
		adj[u].pb({v,i});
		adj[v].pb({u,i});
		edgecost[i]={c1,c2};
		gadj[u].pb(v);
		gadj[v].pb(u);
	}
	treelca lca(n,0,gadj);
	vi psum(n,0);
	crep(v,1,n){
		ll up=lca.ancestor(v,v-1);
		psum[up]-=2;
		psum[v]++;
		psum[v-1]++;
	}
	ll ans=0;
	auto magicaldfs=[&](auto self,ll v,ll par)->void{
		for(auto p : adj[v]){
			ll u=p.fi,id=p.se;
			if(u!=par){
				self(self,u,v);
				ans+=min(edgecost[id].fi*psum[u],edgecost[id].se);
				psum[v]+=psum[u];
			}
		}
	};
	magicaldfs(magicaldfs,0,-1);
	cout<<ans<<"\n";
//	
	return 0;
}
# Verdict Execution time Memory Grader output
1 Correct 0 ms 204 KB Output is correct
2 Correct 2 ms 1100 KB Output is correct
3 Correct 2 ms 1100 KB Output is correct
4 Correct 3 ms 1100 KB Output is correct
5 Correct 2 ms 1100 KB Output is correct
6 Correct 0 ms 332 KB Output is correct
7 Correct 1 ms 460 KB Output is correct
8 Correct 2 ms 844 KB Output is correct
9 Correct 2 ms 1100 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 134 ms 39072 KB Output is correct
2 Correct 127 ms 39968 KB Output is correct
3 Correct 149 ms 43484 KB Output is correct
4 Correct 152 ms 47008 KB Output is correct
5 Correct 1 ms 588 KB Output is correct
6 Correct 146 ms 39836 KB Output is correct
7 Correct 86 ms 28412 KB Output is correct
8 Correct 140 ms 41348 KB Output is correct
9 Correct 91 ms 44088 KB Output is correct
10 Correct 91 ms 42792 KB Output is correct
11 Correct 94 ms 46236 KB Output is correct
12 Correct 99 ms 46500 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 0 ms 204 KB Output is correct
2 Correct 2 ms 1100 KB Output is correct
3 Correct 2 ms 1100 KB Output is correct
4 Correct 3 ms 1100 KB Output is correct
5 Correct 2 ms 1100 KB Output is correct
6 Correct 0 ms 332 KB Output is correct
7 Correct 1 ms 460 KB Output is correct
8 Correct 2 ms 844 KB Output is correct
9 Correct 2 ms 1100 KB Output is correct
10 Correct 134 ms 39072 KB Output is correct
11 Correct 127 ms 39968 KB Output is correct
12 Correct 149 ms 43484 KB Output is correct
13 Correct 152 ms 47008 KB Output is correct
14 Correct 1 ms 588 KB Output is correct
15 Correct 146 ms 39836 KB Output is correct
16 Correct 86 ms 28412 KB Output is correct
17 Correct 140 ms 41348 KB Output is correct
18 Correct 91 ms 44088 KB Output is correct
19 Correct 91 ms 42792 KB Output is correct
20 Correct 94 ms 46236 KB Output is correct
21 Correct 99 ms 46500 KB Output is correct
22 Correct 180 ms 44192 KB Output is correct
23 Correct 146 ms 39088 KB Output is correct
24 Correct 160 ms 43548 KB Output is correct
25 Correct 2 ms 716 KB Output is correct
26 Correct 66 ms 20276 KB Output is correct
27 Correct 134 ms 37256 KB Output is correct
28 Correct 80 ms 38920 KB Output is correct
29 Correct 102 ms 46480 KB Output is correct
30 Correct 105 ms 46148 KB Output is correct
31 Correct 2 ms 972 KB Output is correct