Submission #1149183

#TimeUsernameProblemLanguageResultExecution timeMemory
1149183MighilonPetrol stations (CEOI24_stations)C++20
37 / 100
103 ms44980 KiB
#include <bits/stdc++.h> using namespace std; #ifdef DEBUG #include "../Library/debug.h" #else #define dbg(x...) #endif typedef long long ll; typedef long double ld; typedef pair<int, int> pi; typedef pair<ll, ll> pl; typedef vector<int> vi; typedef vector<bool> vb; typedef vector<ll> vl; typedef vector<pi> vpi; typedef vector<pl> vpl; #define FOR(i, a, b) for (int i = (a); i < (b); ++i) #define F0R(i, a) for (int i = 0; i < (a); ++i) #define FORd(i, a, b) for (int i = (b) - 1; i >= (a); --i) #define F0Rd(i, a) for (int i = (a) - 1; i >= 0; --i) #define trav(a, x) for (auto& a : x) #define f first #define s second #define pb push_back #define sz(x) (int)(x).size() #define all(x) x.begin(), x.end() const char nl = '\n'; const int INF = 1e9; const ll MOD = 1e9 + 7; vector<vl> adj; vector<array<ll,2>> e; ll n,k; vl ans, sz; vector<vector<array<ll,21>>> dp(2,vector<array<ll,21>>()); void dfs(int v, int p){ sz[v]=1; trav(id, adj[v]){ int u=e[id][0]^v; if(u==p)continue; dfs(u,v); sz[v]+=sz[u]; F0R(i,11){ if(i-e[id][1]<0){ ans[u]+=dp[0][u][i]*(n-sz[u]); dp[0][v][k-e[id][1]]+=dp[0][u][i]; } else{ dp[0][v][i-e[id][1]]+=dp[0][u][i]; } } dp[0][v][k-e[id][1]]++; } } void dfs2(int v, int p,int w){ if(p!=-1){ array<ll,21> sib; F0R(i,11)sib[i]=0; F0R(i,11){ if(i-w<0) sib[k-w]+=dp[0][v][i]; else sib[i-w]+=dp[0][v][i]; } F0R(i,11){ sib[i]=dp[0][p][i]-sib[i]+dp[1][p][i]; } sib[k-w]--; sib[k]++; dbg(dp[0][p]) dbg(dp[0][v]) dbg(v,p,sib) F0R(i,11){ if(i-w<0){ dbg(i, sib[i]*sz[v],v) ans[p]+=sib[i]*(sz[v]); dp[1][v][k-w]+=sib[i]; } else dp[1][v][i-w]+=sib[i]; } } trav(id,adj[v]){ int u=e[id][0]^v; if(u==p)continue; dfs2(u,v,e[id][1]); } } void solve(){ cin>>n>>k; adj.resize(n); sz.resize(n); e.resize(n-1); ans.resize(n); dp[0].resize(n); dp[1].resize(n); F0R(i,n-1){ int a,b,c; cin>>a>>b>>c; adj[a].pb(i); adj[b].pb(i); e[i]={a^b,c}; } dfs(0,-1); dbg(ans) dfs2(0,-1,-1); dbg(ans) dbg(dp[0]) dbg(dp[1]) F0R(i,n)cout<<ans[i]<<" "; cout<<nl; } int32_t main(){ ios::sync_with_stdio(false); cin.tie(NULL); cout.tie(NULL); int TC = 1; // cin >> TC; while(TC--){ solve(); } 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...
#Verdict Execution timeMemoryGrader output
Fetching results...