#include <bits/stdc++.h>
#ifndef SKY
#include "roads.h"
#endif // SKY
using namespace std;
#define N 100010
#define ll long long
#define fs first
#define sc second
#define ii pair<ll,int>
#define pb push_back
#pragma GCC optimize("Ofast")
#pragma GCC optimize("inline")
#pragma GCC optimize("omit-frame-pointer")
#pragma GCC optimize("unroll-loops")
const ll MAX_VAL=2e14;
int cnt,BLOCKS,k,n,ktr[N],spec[N];
vector<ii>g[N],edge[N];
ll tong,them,cost[N],dp[N][2];
vector<ll>sum[N];
vector<int>lis;
struct nho
{
void build(int u,int p)
{
for(auto v:g[u])
if(v.sc!=p)
{
build(v.sc,u);
cost[v.sc]=v.fs;
}
}
ll solve(int u,int p,int sl,const vector<ll>&s)
{
if(sl<0)
return MAX_VAL;
ll res=0;
for(auto v:g[u])
if(v.sc!=p)
if(dp[v.sc][0]<=dp[v.sc][1])
{
res+=dp[v.sc][0];
}else
{
res+=dp[v.sc][1];
}
for(int i=0;i<(int)s.size()-sl;i++)
res+=s[i];
return res;
}
void DFS(int u,int p)
{
for(auto v:g[u])
if(v.sc!=p)
DFS(v.sc,u);
vector<ll>s;
for(auto v:g[u])
if(v.sc!=p&&dp[v.sc][0]>dp[v.sc][1])
s.pb(dp[v.sc][0]-dp[v.sc][1]);
if((int)s.size()>k-(u!=0))
sort(s.begin(),s.end());
//0
dp[u][0]=solve(u,p,k,s)+cost[u];
//1
dp[u][1]=solve(u,p,k-(u!=0),s);
}
}nho;
ll get(int u,int sl)
{
if(sl>=sum[u].size())
return 0;
if(sl==0)
return sum[u].back();
return sum[u].back()-sum[u][sl-1];
}
ll solve(int u,int p,int sl,const vector<ll>&s)
{
if(sl<0)
return MAX_VAL;
ll cong=0,res=MAX_VAL;
for(auto v:edge[u])
if(v.sc!=p)
{
if(dp[v.sc][0]<=dp[v.sc][1])
{
cong+=dp[v.sc][0];
}else
{
cong+=dp[v.sc][1];
}
}
if((int)s.size()<=sl)
res=min(res,cong+get(u,sl-(int)s.size()));
for(int i=0;i<s.size();i++)
{
cong+=s[i];
if((int)s.size()-i-1<=sl)
res=min(res,cong+get(u,sl-((int)s.size()-i-1)));
if(sl-((int)s.size()-i-1)>=sum[u].size())
break;
}
return res;
}
void DFS(int u,int p)
{
ktr[u]=k;
for(auto v:edge[u])
if(v.sc!=p)
{
cost[v.sc]=v.fs;
DFS(v.sc,u);
}
vector<ll>s;
for(auto v:edge[u])
if(v.sc!=p&&dp[v.sc][0]>dp[v.sc][1])
s.pb(dp[v.sc][0]-dp[v.sc][1]);
if((int)s.size()+(int)sum[u].size()>k-(p!=-1))
sort(s.begin(),s.end());
//0
dp[u][0]=solve(u,p,k,s)+cost[u];
//1
dp[u][1]=solve(u,p,k-(p!=-1),s);
}
vector<long long> minimum_closure_costs(int NNN, vector<int> UUU, vector<int> VVV, vector<int> WWW)
{
n=NNN;
for(int i=0;i<n-1;i++)
{
int u=UUU[i],v=VVV[i],w=WWW[i];
g[u].pb({w,v});
g[v].pb({w,u});
}
cost[0]=1e18;
nho.build(0,-1);
vector<ll>kq;
BLOCKS=sqrt(n);
BLOCKS=min(BLOCKS,50);
for(int i=0;i<n;i++)
spec[i]=((int)g[i].size()>BLOCKS);
for(int i=0;i<n-1;i++)
{
int u=UUU[i],v=VVV[i],w=WWW[i];
tong+=1ll*w;
if((int)g[u].size()<(int)g[v].size())
swap(u,v);
if(spec[u]&&spec[v])
{
edge[u].pb({w,v});
edge[v].pb({w,u});
cnt++;
continue;
}
if(spec[u])
{
sum[u].pb(w);
continue;
}
them+=1ll*w;
}
assert(cnt<=BLOCKS);
for(k=0;k<=BLOCKS;k++)
{
nho.DFS(0,-1);
kq.pb(dp[0][1]);
}
for(int i=0;i<n;i++)
{
sort(sum[i].begin(),sum[i].end(),greater<ll>());
for(int j=1;j<sum[i].size();j++)
sum[i][j]+=sum[i][j-1];
}
for(int i=0;i<n;i++)
if(spec[i]==1)
lis.pb(i);
memset(cost,0x3f3f,sizeof(cost));
for(k=BLOCKS+1;k<n;k++)
{
ll res=0;
for(auto u:lis)
if(ktr[u]!=k)
DFS(u,-1),res+=dp[u][1];
kq.pb(res);
}
return kq;
}
#ifdef SKY
int main()
{
freopen("A.inp","r",stdin);
freopen("A.out","w",stdout);
ios::sync_with_stdio(0);
cin.tie(NULL);
cout.tie(NULL);
int n;
cin>>n;
vector<int>U(n-1),V(n-1),W(n-1);
for(int i=0;i<n-1;i++)
cin>>U[i]>>V[i]>>W[i];
vector<ll>kq=minimum_closure_costs(n,U,V,W);
for(auto u:kq)cout<<u<<" ";
return 0;
}
#endif
Compilation message
roads.cpp: In member function 'long long int nho::solve(int, int, int, const std::vector<long long int>&)':
roads.cpp:48:15: warning: suggest explicit braces to avoid ambiguous 'else' [-Wdangling-else]
48 | if(v.sc!=p)
| ^
roads.cpp: In function 'long long int get(int, int)':
roads.cpp:81:10: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<long long int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
81 | if(sl>=sum[u].size())
| ~~^~~~~~~~~~~~~~~
roads.cpp: In function 'long long int solve(int, int, int, const std::vector<long long int>&)':
roads.cpp:106:18: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<long long int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
106 | for(int i=0;i<s.size();i++)
| ~^~~~~~~~~
roads.cpp:111:34: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<long long int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
111 | if(sl-((int)s.size()-i-1)>=sum[u].size())
| ~~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~
roads.cpp: In function 'std::vector<long long int> minimum_closure_costs(int, std::vector<int>, std::vector<int>, std::vector<int>)':
roads.cpp:183:22: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<long long int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
183 | for(int j=1;j<sum[i].size();j++)
| ~^~~~~~~~~~~~~~
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
5 ms |
8020 KB |
Output is correct |
2 |
Correct |
12 ms |
8404 KB |
Output is correct |
3 |
Correct |
11 ms |
8400 KB |
Output is correct |
4 |
Correct |
9 ms |
8396 KB |
Output is correct |
5 |
Correct |
4 ms |
8148 KB |
Output is correct |
6 |
Correct |
5 ms |
8128 KB |
Output is correct |
7 |
Correct |
5 ms |
8148 KB |
Output is correct |
8 |
Correct |
8 ms |
8276 KB |
Output is correct |
9 |
Correct |
9 ms |
8400 KB |
Output is correct |
10 |
Correct |
4 ms |
8148 KB |
Output is correct |
11 |
Correct |
5 ms |
8148 KB |
Output is correct |
12 |
Correct |
213 ms |
15804 KB |
Output is correct |
13 |
Correct |
420 ms |
21304 KB |
Output is correct |
14 |
Correct |
597 ms |
20848 KB |
Output is correct |
15 |
Correct |
641 ms |
22064 KB |
Output is correct |
16 |
Correct |
705 ms |
22248 KB |
Output is correct |
17 |
Correct |
380 ms |
22336 KB |
Output is correct |
18 |
Correct |
4 ms |
8148 KB |
Output is correct |
19 |
Correct |
343 ms |
20060 KB |
Output is correct |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
4 ms |
8020 KB |
Output is correct |
2 |
Correct |
316 ms |
24360 KB |
Output is correct |
3 |
Correct |
327 ms |
26224 KB |
Output is correct |
4 |
Correct |
382 ms |
27464 KB |
Output is correct |
5 |
Correct |
384 ms |
27208 KB |
Output is correct |
6 |
Correct |
9 ms |
8404 KB |
Output is correct |
7 |
Correct |
10 ms |
8532 KB |
Output is correct |
8 |
Correct |
10 ms |
8396 KB |
Output is correct |
9 |
Correct |
5 ms |
8148 KB |
Output is correct |
10 |
Correct |
5 ms |
8148 KB |
Output is correct |
11 |
Correct |
5 ms |
8148 KB |
Output is correct |
12 |
Correct |
206 ms |
19300 KB |
Output is correct |
13 |
Correct |
357 ms |
26952 KB |
Output is correct |
14 |
Correct |
4 ms |
8148 KB |
Output is correct |
15 |
Correct |
317 ms |
25152 KB |
Output is correct |
16 |
Correct |
359 ms |
27016 KB |
Output is correct |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
4 ms |
8020 KB |
Output is correct |
2 |
Correct |
4 ms |
8148 KB |
Output is correct |
3 |
Correct |
4 ms |
8148 KB |
Output is correct |
4 |
Correct |
5 ms |
8132 KB |
Output is correct |
5 |
Correct |
5 ms |
8148 KB |
Output is correct |
6 |
Correct |
5 ms |
8148 KB |
Output is correct |
7 |
Correct |
5 ms |
8128 KB |
Output is correct |
8 |
Correct |
4 ms |
8148 KB |
Output is correct |
9 |
Correct |
4 ms |
8148 KB |
Output is correct |
10 |
Correct |
5 ms |
8128 KB |
Output is correct |
11 |
Correct |
5 ms |
8148 KB |
Output is correct |
12 |
Correct |
5 ms |
8148 KB |
Output is correct |
13 |
Correct |
5 ms |
8128 KB |
Output is correct |
14 |
Correct |
4 ms |
8148 KB |
Output is correct |
15 |
Correct |
5 ms |
8132 KB |
Output is correct |
16 |
Correct |
4 ms |
8148 KB |
Output is correct |
17 |
Correct |
5 ms |
8132 KB |
Output is correct |
18 |
Correct |
5 ms |
8132 KB |
Output is correct |
19 |
Correct |
5 ms |
8124 KB |
Output is correct |
20 |
Correct |
4 ms |
8148 KB |
Output is correct |
21 |
Correct |
4 ms |
8148 KB |
Output is correct |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
4 ms |
8020 KB |
Output is correct |
2 |
Correct |
4 ms |
8148 KB |
Output is correct |
3 |
Correct |
4 ms |
8148 KB |
Output is correct |
4 |
Correct |
5 ms |
8132 KB |
Output is correct |
5 |
Correct |
5 ms |
8148 KB |
Output is correct |
6 |
Correct |
5 ms |
8148 KB |
Output is correct |
7 |
Correct |
5 ms |
8128 KB |
Output is correct |
8 |
Correct |
4 ms |
8148 KB |
Output is correct |
9 |
Correct |
4 ms |
8148 KB |
Output is correct |
10 |
Correct |
5 ms |
8128 KB |
Output is correct |
11 |
Correct |
5 ms |
8148 KB |
Output is correct |
12 |
Correct |
5 ms |
8148 KB |
Output is correct |
13 |
Correct |
5 ms |
8128 KB |
Output is correct |
14 |
Correct |
4 ms |
8148 KB |
Output is correct |
15 |
Correct |
5 ms |
8132 KB |
Output is correct |
16 |
Correct |
4 ms |
8148 KB |
Output is correct |
17 |
Correct |
5 ms |
8132 KB |
Output is correct |
18 |
Correct |
5 ms |
8132 KB |
Output is correct |
19 |
Correct |
5 ms |
8124 KB |
Output is correct |
20 |
Correct |
4 ms |
8148 KB |
Output is correct |
21 |
Correct |
4 ms |
8148 KB |
Output is correct |
22 |
Correct |
4 ms |
8148 KB |
Output is correct |
23 |
Correct |
9 ms |
8268 KB |
Output is correct |
24 |
Correct |
13 ms |
8400 KB |
Output is correct |
25 |
Correct |
10 ms |
8276 KB |
Output is correct |
26 |
Correct |
11 ms |
8404 KB |
Output is correct |
27 |
Correct |
10 ms |
8404 KB |
Output is correct |
28 |
Correct |
9 ms |
8404 KB |
Output is correct |
29 |
Correct |
11 ms |
8276 KB |
Output is correct |
30 |
Correct |
16 ms |
8436 KB |
Output is correct |
31 |
Correct |
11 ms |
8404 KB |
Output is correct |
32 |
Correct |
9 ms |
8400 KB |
Output is correct |
33 |
Correct |
9 ms |
8404 KB |
Output is correct |
34 |
Correct |
10 ms |
8532 KB |
Output is correct |
35 |
Correct |
9 ms |
8404 KB |
Output is correct |
36 |
Correct |
9 ms |
8404 KB |
Output is correct |
37 |
Correct |
11 ms |
8400 KB |
Output is correct |
38 |
Correct |
8 ms |
8532 KB |
Output is correct |
39 |
Correct |
4 ms |
8148 KB |
Output is correct |
40 |
Correct |
4 ms |
8148 KB |
Output is correct |
41 |
Correct |
5 ms |
8148 KB |
Output is correct |
42 |
Correct |
5 ms |
8148 KB |
Output is correct |
43 |
Correct |
5 ms |
8148 KB |
Output is correct |
44 |
Correct |
5 ms |
8148 KB |
Output is correct |
45 |
Correct |
4 ms |
8148 KB |
Output is correct |
46 |
Correct |
5 ms |
8148 KB |
Output is correct |
47 |
Correct |
5 ms |
8132 KB |
Output is correct |
48 |
Correct |
4 ms |
8128 KB |
Output is correct |
49 |
Correct |
5 ms |
8148 KB |
Output is correct |
50 |
Correct |
5 ms |
8132 KB |
Output is correct |
51 |
Correct |
5 ms |
8060 KB |
Output is correct |
52 |
Correct |
5 ms |
8148 KB |
Output is correct |
53 |
Correct |
10 ms |
8268 KB |
Output is correct |
54 |
Correct |
12 ms |
8276 KB |
Output is correct |
55 |
Correct |
11 ms |
8404 KB |
Output is correct |
56 |
Correct |
8 ms |
8276 KB |
Output is correct |
57 |
Correct |
9 ms |
8400 KB |
Output is correct |
58 |
Correct |
4 ms |
8148 KB |
Output is correct |
59 |
Correct |
5 ms |
8148 KB |
Output is correct |
60 |
Correct |
5 ms |
8132 KB |
Output is correct |
61 |
Correct |
4 ms |
8148 KB |
Output is correct |
62 |
Correct |
5 ms |
8148 KB |
Output is correct |
63 |
Correct |
4 ms |
8020 KB |
Output is correct |
64 |
Correct |
12 ms |
8276 KB |
Output is correct |
65 |
Correct |
15 ms |
8276 KB |
Output is correct |
66 |
Correct |
10 ms |
8356 KB |
Output is correct |
67 |
Correct |
8 ms |
8364 KB |
Output is correct |
68 |
Correct |
14 ms |
8404 KB |
Output is correct |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
1024 ms |
18620 KB |
Output is correct |
2 |
Correct |
1174 ms |
18500 KB |
Output is correct |
3 |
Runtime error |
58 ms |
37704 KB |
Execution killed with signal 6 |
4 |
Halted |
0 ms |
0 KB |
- |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
1024 ms |
18620 KB |
Output is correct |
2 |
Correct |
1174 ms |
18500 KB |
Output is correct |
3 |
Runtime error |
58 ms |
37704 KB |
Execution killed with signal 6 |
4 |
Halted |
0 ms |
0 KB |
- |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
5 ms |
8020 KB |
Output is correct |
2 |
Correct |
12 ms |
8404 KB |
Output is correct |
3 |
Correct |
11 ms |
8400 KB |
Output is correct |
4 |
Correct |
9 ms |
8396 KB |
Output is correct |
5 |
Correct |
4 ms |
8148 KB |
Output is correct |
6 |
Correct |
5 ms |
8128 KB |
Output is correct |
7 |
Correct |
5 ms |
8148 KB |
Output is correct |
8 |
Correct |
8 ms |
8276 KB |
Output is correct |
9 |
Correct |
9 ms |
8400 KB |
Output is correct |
10 |
Correct |
4 ms |
8148 KB |
Output is correct |
11 |
Correct |
5 ms |
8148 KB |
Output is correct |
12 |
Correct |
213 ms |
15804 KB |
Output is correct |
13 |
Correct |
420 ms |
21304 KB |
Output is correct |
14 |
Correct |
597 ms |
20848 KB |
Output is correct |
15 |
Correct |
641 ms |
22064 KB |
Output is correct |
16 |
Correct |
705 ms |
22248 KB |
Output is correct |
17 |
Correct |
380 ms |
22336 KB |
Output is correct |
18 |
Correct |
4 ms |
8148 KB |
Output is correct |
19 |
Correct |
343 ms |
20060 KB |
Output is correct |
20 |
Correct |
4 ms |
8020 KB |
Output is correct |
21 |
Correct |
316 ms |
24360 KB |
Output is correct |
22 |
Correct |
327 ms |
26224 KB |
Output is correct |
23 |
Correct |
382 ms |
27464 KB |
Output is correct |
24 |
Correct |
384 ms |
27208 KB |
Output is correct |
25 |
Correct |
9 ms |
8404 KB |
Output is correct |
26 |
Correct |
10 ms |
8532 KB |
Output is correct |
27 |
Correct |
10 ms |
8396 KB |
Output is correct |
28 |
Correct |
5 ms |
8148 KB |
Output is correct |
29 |
Correct |
5 ms |
8148 KB |
Output is correct |
30 |
Correct |
5 ms |
8148 KB |
Output is correct |
31 |
Correct |
206 ms |
19300 KB |
Output is correct |
32 |
Correct |
357 ms |
26952 KB |
Output is correct |
33 |
Correct |
4 ms |
8148 KB |
Output is correct |
34 |
Correct |
317 ms |
25152 KB |
Output is correct |
35 |
Correct |
359 ms |
27016 KB |
Output is correct |
36 |
Correct |
4 ms |
8020 KB |
Output is correct |
37 |
Correct |
4 ms |
8148 KB |
Output is correct |
38 |
Correct |
4 ms |
8148 KB |
Output is correct |
39 |
Correct |
5 ms |
8132 KB |
Output is correct |
40 |
Correct |
5 ms |
8148 KB |
Output is correct |
41 |
Correct |
5 ms |
8148 KB |
Output is correct |
42 |
Correct |
5 ms |
8128 KB |
Output is correct |
43 |
Correct |
4 ms |
8148 KB |
Output is correct |
44 |
Correct |
4 ms |
8148 KB |
Output is correct |
45 |
Correct |
5 ms |
8128 KB |
Output is correct |
46 |
Correct |
5 ms |
8148 KB |
Output is correct |
47 |
Correct |
5 ms |
8148 KB |
Output is correct |
48 |
Correct |
5 ms |
8128 KB |
Output is correct |
49 |
Correct |
4 ms |
8148 KB |
Output is correct |
50 |
Correct |
5 ms |
8132 KB |
Output is correct |
51 |
Correct |
4 ms |
8148 KB |
Output is correct |
52 |
Correct |
5 ms |
8132 KB |
Output is correct |
53 |
Correct |
5 ms |
8132 KB |
Output is correct |
54 |
Correct |
5 ms |
8124 KB |
Output is correct |
55 |
Correct |
4 ms |
8148 KB |
Output is correct |
56 |
Correct |
4 ms |
8148 KB |
Output is correct |
57 |
Correct |
4 ms |
8148 KB |
Output is correct |
58 |
Correct |
9 ms |
8268 KB |
Output is correct |
59 |
Correct |
13 ms |
8400 KB |
Output is correct |
60 |
Correct |
10 ms |
8276 KB |
Output is correct |
61 |
Correct |
11 ms |
8404 KB |
Output is correct |
62 |
Correct |
10 ms |
8404 KB |
Output is correct |
63 |
Correct |
9 ms |
8404 KB |
Output is correct |
64 |
Correct |
11 ms |
8276 KB |
Output is correct |
65 |
Correct |
16 ms |
8436 KB |
Output is correct |
66 |
Correct |
11 ms |
8404 KB |
Output is correct |
67 |
Correct |
9 ms |
8400 KB |
Output is correct |
68 |
Correct |
9 ms |
8404 KB |
Output is correct |
69 |
Correct |
10 ms |
8532 KB |
Output is correct |
70 |
Correct |
9 ms |
8404 KB |
Output is correct |
71 |
Correct |
9 ms |
8404 KB |
Output is correct |
72 |
Correct |
11 ms |
8400 KB |
Output is correct |
73 |
Correct |
8 ms |
8532 KB |
Output is correct |
74 |
Correct |
4 ms |
8148 KB |
Output is correct |
75 |
Correct |
4 ms |
8148 KB |
Output is correct |
76 |
Correct |
5 ms |
8148 KB |
Output is correct |
77 |
Correct |
5 ms |
8148 KB |
Output is correct |
78 |
Correct |
5 ms |
8148 KB |
Output is correct |
79 |
Correct |
5 ms |
8148 KB |
Output is correct |
80 |
Correct |
4 ms |
8148 KB |
Output is correct |
81 |
Correct |
5 ms |
8148 KB |
Output is correct |
82 |
Correct |
5 ms |
8132 KB |
Output is correct |
83 |
Correct |
4 ms |
8128 KB |
Output is correct |
84 |
Correct |
5 ms |
8148 KB |
Output is correct |
85 |
Correct |
5 ms |
8132 KB |
Output is correct |
86 |
Correct |
5 ms |
8060 KB |
Output is correct |
87 |
Correct |
5 ms |
8148 KB |
Output is correct |
88 |
Correct |
10 ms |
8268 KB |
Output is correct |
89 |
Correct |
12 ms |
8276 KB |
Output is correct |
90 |
Correct |
11 ms |
8404 KB |
Output is correct |
91 |
Correct |
8 ms |
8276 KB |
Output is correct |
92 |
Correct |
9 ms |
8400 KB |
Output is correct |
93 |
Correct |
4 ms |
8148 KB |
Output is correct |
94 |
Correct |
5 ms |
8148 KB |
Output is correct |
95 |
Correct |
5 ms |
8132 KB |
Output is correct |
96 |
Correct |
4 ms |
8148 KB |
Output is correct |
97 |
Correct |
5 ms |
8148 KB |
Output is correct |
98 |
Correct |
4 ms |
8020 KB |
Output is correct |
99 |
Correct |
12 ms |
8276 KB |
Output is correct |
100 |
Correct |
15 ms |
8276 KB |
Output is correct |
101 |
Correct |
10 ms |
8356 KB |
Output is correct |
102 |
Correct |
8 ms |
8364 KB |
Output is correct |
103 |
Correct |
14 ms |
8404 KB |
Output is correct |
104 |
Correct |
1024 ms |
18620 KB |
Output is correct |
105 |
Correct |
1174 ms |
18500 KB |
Output is correct |
106 |
Runtime error |
58 ms |
37704 KB |
Execution killed with signal 6 |
107 |
Halted |
0 ms |
0 KB |
- |