Submission #372908

#TimeUsernameProblemLanguageResultExecution timeMemory
372908sam571128Janjetina (COCI21_janjetina)C++14
110 / 110
609 ms18268 KiB
#include <bits/stdc++.h>

#define int long long
#define fastio ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0);

using namespace std;

const int N = 1e5+5;
vector<pair<int,int>> adj[N];
vector<pair<int,int>> vv;
int ans, nowsz;
int n,k;
int bit[N], sz[N], vis[N], dep[N];

void update(int pos, int val){
	pos++;
	while(pos < N){
		bit[pos] += val;
		pos += pos&-pos;
	}
}

int query(int pos){
	pos++;
	int res = 0;
	while(pos>0){
		res += bit[pos];
		pos -= pos&-pos;
	}
	return res;
}

void dfs(int u, int par){
	nowsz++;
	sz[u] = 1;
	for(auto [v,w] : adj[u]){
		if(v==par||vis[v]) continue;
		dep[v] = dep[u]+1;
		dfs(v,u);
		sz[u] += sz[v];
	}
}

int dfs2(int u, int par){
	for(auto [v,w] : adj[u]){
		if(v==par||vis[v]) continue;
		if(sz[v]*2 > nowsz) return dfs2(v,u);
	}
	return u;
}

void dfs3(int u, int par, int mx){
	vv.push_back({mx,u});
	for(auto [v,w] : adj[u]){
		if(v==par||vis[v]) continue;
		dfs3(v,u,max(mx,w));
	}
}

void solve(int num){
	sort(vv.begin(),vv.end());
	for(auto [a,b] : vv){
		if(a-dep[b]-k>=0) ans += num*query(a-dep[b]-k);
		update(dep[b],1);
	}
	for(auto [a,b] : vv){
		update(dep[b],-1);
	}
	vv.clear();
}

void decompose(int u){
	nowsz = 0;
	dep[u] = 0;
	dfs(u,-1);
	int cen = dfs2(u,-1);
	dep[cen] = 0;
	nowsz = 0;
	dfs(cen,-1);
	dfs3(cen,cen,0);
	solve(1);
	for(auto [v,w] : adj[cen]){
		if(vis[v]) continue;
		dfs3(v,cen,w);
		solve(-1);
	}
	vis[cen] = 1;
	for(auto [v,w] : adj[cen]){
		if(vis[v]) continue;
		decompose(v);
	}
}

signed main(){
	fastio
	cin >> n >> k;
	for(int i = 1;i < n;i++){
		int u,v,w;
		cin >> u >> v >> w;
		adj[u].push_back({v,w});
		adj[v].push_back({u,w});
	}
	decompose(1);
	cout << ans*2 << "\n";
}

Compilation message (stderr)

Main.cpp: In function 'void dfs(long long int, long long int)':
Main.cpp:36:11: warning: structured bindings only available with '-std=c++17' or '-std=gnu++17'
   36 |  for(auto [v,w] : adj[u]){
      |           ^
Main.cpp: In function 'long long int dfs2(long long int, long long int)':
Main.cpp:45:11: warning: structured bindings only available with '-std=c++17' or '-std=gnu++17'
   45 |  for(auto [v,w] : adj[u]){
      |           ^
Main.cpp: In function 'void dfs3(long long int, long long int, long long int)':
Main.cpp:54:11: warning: structured bindings only available with '-std=c++17' or '-std=gnu++17'
   54 |  for(auto [v,w] : adj[u]){
      |           ^
Main.cpp: In function 'void solve(long long int)':
Main.cpp:62:11: warning: structured bindings only available with '-std=c++17' or '-std=gnu++17'
   62 |  for(auto [a,b] : vv){
      |           ^
Main.cpp:66:11: warning: structured bindings only available with '-std=c++17' or '-std=gnu++17'
   66 |  for(auto [a,b] : vv){
      |           ^
Main.cpp: In function 'void decompose(long long int)':
Main.cpp:82:11: warning: structured bindings only available with '-std=c++17' or '-std=gnu++17'
   82 |  for(auto [v,w] : adj[cen]){
      |           ^
Main.cpp:88:11: warning: structured bindings only available with '-std=c++17' or '-std=gnu++17'
   88 |  for(auto [v,w] : adj[cen]){
      |           ^
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...