제출 #1345758

#제출 시각아이디문제언어결과실행 시간메모리
1345758thelegendary08Petrol stations (CEOI24_stations)C++17
55 / 100
71 ms45412 KiB
#include<bits/stdc++.h>
#define int long long
#define f0r(i,n) for(int i = 0; i < n; i++)
#define FOR(i,k,n) for(int i = k; i < n; i++)
#define pb push_back
#define mp make_pair
#define eb emplace_back
#define F first
#define S second
#define vi vector<int>
#define pii pair<int,int>
#define out(x) cout<<x<<'\n'
#define dout(x) cout<<x<<' '<<#x<<endl
#define dout2(x,y) cout<<x<<' '<<#x<<' '<<y<<' '<<#y<<endl
#define vout(v) cout<<#v<<": "; for(auto u : v)cout<<u<<' '; cout<<endl
using namespace std; 
const int mxn = 7e4 + 5;
int n,k; vector<pii> adj[mxn]; vector<vi> f, g; int sz[mxn], ans[mxn];
void dfs(int node, int from, int pw){
	sz[node]=1;
	for(auto [u,w] : adj[node])if(u!=from){
		dfs(u,node,w); sz[node]+=sz[u]; FOR(i,w,k+1)f[node][i-w] += f[u][i]; 
	}
	f[node][k]++; 
	if(from != -1){
		int sum = 0; f0r(i,pw)sum += f[node][i],f[node][i]=0; f[node][k]+=sum; ans[node] += sum * (n - sz[node]); 
	}
}
void dfs2(int node, int from){
	g[node][k]++; vi sum(k+1); for(auto [u,w] : adj[node])if(u!=from){
		FOR(i,w,k+1)sum[i-w] += f[u][i]; 
	} f0r(i,k+1)sum[i] += g[node][i]; //dout(node); vout(g[node]); vout(sum);
	for(auto [u,w] : adj[node])if(u!=from){
		vi tmp = sum; FOR(i,w,k+1)tmp[i-w] -= f[u][i]; int cur = 0; f0r(i,w)cur += tmp[i], tmp[i] = 0; tmp[k] += cur; 
		ans[node] += sz[u] * cur; FOR(i,w,k+1)g[u][i-w] = tmp[i]; dfs2(u,node);
	}
}
signed main(){
	cin>>n>>k; f0r(i,n-1){int a,b,c; cin>>a>>b>>c; adj[a].eb(b,c); adj[b].eb(a,c);} 
	f.resize(n), g.resize(n); f0r(i,n)f[i].resize(k+1), g[i].resize(k+1); dfs(0,-1,-1); dfs2(0,-1); 
	// f0r(i,n){vout(f[i]);}
	f0r(i,n)cout<<ans[i]<<'\n';
}
#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...
#Verdict Execution timeMemoryGrader output
Fetching results...