#include<bits/stdc++.h>
#define f first
#define s second
#define ll long long
#define pb push_back
#define pii pair<int,int>
#define pll pair<ll,int>
#define sz(x) (int)x.size()
#define all(x) x.begin(),x.end()
#define vi vector<int>
#define vvi vector<vi>
#define vll vector<ll>
using namespace std;
const int mxn=1e5+5;
vector<pii>g[mxn],gr[mxn];int d[mxn]{0};ll s1[mxn]{0};
vll fw[mxn][2],val[mxn];
void add(int i,ll x,int j){
int id=upper_bound(val[i].begin(),val[i].end(),x)-val[i].begin();
for(;id<fw[i][0].size();id+=id&-id)fw[i][0][id]+=j,fw[i][1][id]+=x*j;
}
pll qr(int i,ll x,int rs=0,int rs2=0){
int id=upper_bound(val[i].begin(),val[i].end(),x)-val[i].begin();
for(;id;id-=id&-id)rs+=fw[i][0][id],rs2+=fw[i][1][id];
return {rs,rs2};
}
ll dp[mxn][2]{0};
vi node;bool use[mxn]{0};
void solve(int u,int p,int k){
vector<ll>v0;int pr=-1;ll sm=0;use[u]=1;
for(auto v:gr[u]){
if(v.f==p){pr=v.s;continue;}
solve(v.f,u,k);v0.pb(dp[v.f][0]-dp[v.f][1]);sm+=dp[v.f][1];
}dp[u][0]=s1[u]+sm+(pr==-1?0:pr);if(pr!=-1)v0.pb(-pr);
sort(v0.begin(),v0.end());
ll l=-1e12,r=1e12;
while(l<r){
ll m=(l+r)>>1;
int id1=qr(u,m).f;
int id2=upper_bound(v0.begin(),v0.end(),m)-v0.begin();
if(id1+id2>=k)r=m;
else l=m+1;
}pll x=qr(u,l);dp[u][0]+=x.s;int mem=0;
for(int i=0;i<v0.size();i++)if(v0[i]<=l)mem=i+1,dp[u][0]+=v0[i];
dp[u][0]-=l*(mem+x.f-k);if(pr==-1)return;
for(int i=0;i<v0.size();i++)if(v0[i]==-pr)mem=i;
swap(v0[mem],v0.back());v0.pop_back();dp[u][1]=s1[u]+sm+pr;sort(v0.begin(),v0.end());
l=-1e15,r=1e15;
while(l<r){
ll m=(l+r)>>1;
int id1=qr(u,m).f;
int id2=upper_bound(v0.begin(),v0.end(),m)-v0.begin();
if(id1+id2>=k)r=m;
else l=m+1;
}x=qr(u,l);dp[u][1]+=x.s;mem=0;
for(int i=0;i<v0.size();i++)if(v0[i]<=l)mem=i+1,dp[u][1]+=v0[i];
dp[u][1]-=l*(mem+x.f-k);
}
vll minimum_closure_costs(int N,vi U,vi V,vi W){vll ans(N,0);ll res=0,tt=0;
for(int i=0;i<N-1;i++)g[U[i]].pb({V[i],W[i]}),g[V[i]].pb({U[i],W[i]}),d[U[i]]++,d[V[i]]++,tt+=W[i];
for(int i=0;i<N;i++)for(auto v:g[i])s1[i]+=v.s,val[i].pb(-v.s);
for(int i=0;i<N;i++){
sort(val[i].begin(),val[i].end()),fw[i][0].resize(val[i].size()+1),fw[i][1].resize(val[i].size()+1);
for(auto it : val[i])add(i,it,1);
}
vector<pii>ed;for(int i=0;i<N-1;i++)ed.pb({min(d[U[i]],d[V[i]]),i});sort(ed.begin(),ed.end());
priority_queue<pii>pq;for(int i=0;i<N;i++)pq.push({d[i],i});
for(int k=N-1;k>=1;k--){
while(!pq.empty()&&pq.top().f>k)node.pb(pq.top().s),pq.pop();
while(!ed.empty()&&ed.back().f>k){
int i=ed.back().s;ed.pop_back();
gr[U[i]].pb({V[i],W[i]});gr[V[i]].pb({U[i],W[i]});
s1[U[i]]-=W[i];s1[V[i]]-=W[i];add(U[i],-W[i],-1);
add(V[i],-W[i],-1);
}
for(auto it:node)if(!use[it])solve(it,it,k),res+=dp[it][0];
for(auto it:node)use[it]=0,dp[it][0]=dp[it][1]=0;
ans[k]=res;res=0;
}ans[0]=tt;
return ans;
}
Compilation message
roads.cpp: In function 'void add(int, long long int, int)':
roads.cpp:19:12: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<long long int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
19 | for(;id<fw[i][0].size();id+=id&-id)fw[i][0][id]+=j,fw[i][1][id]+=x*j;
| ~~^~~~~~~~~~~~~~~~
roads.cpp: In function 'void solve(int, int, int)':
roads.cpp:43:18: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<long long int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
43 | for(int i=0;i<v0.size();i++)if(v0[i]<=l)mem=i+1,dp[u][0]+=v0[i];
| ~^~~~~~~~~~
roads.cpp:45:18: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<long long int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
45 | for(int i=0;i<v0.size();i++)if(v0[i]==-pr)mem=i;
| ~^~~~~~~~~~
roads.cpp:55:18: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<long long int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
55 | for(int i=0;i<v0.size();i++)if(v0[i]<=l)mem=i+1,dp[u][1]+=v0[i];
| ~^~~~~~~~~~
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
3 ms |
14684 KB |
Output is correct |
2 |
Incorrect |
6 ms |
15196 KB |
Output isn't correct |
3 |
Halted |
0 ms |
0 KB |
- |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
3 ms |
14684 KB |
Output is correct |
2 |
Correct |
178 ms |
47836 KB |
Output is correct |
3 |
Correct |
205 ms |
51796 KB |
Output is correct |
4 |
Correct |
213 ms |
54356 KB |
Output is correct |
5 |
Correct |
219 ms |
54560 KB |
Output is correct |
6 |
Correct |
7 ms |
15576 KB |
Output is correct |
7 |
Correct |
7 ms |
15452 KB |
Output is correct |
8 |
Correct |
6 ms |
15452 KB |
Output is correct |
9 |
Correct |
4 ms |
14684 KB |
Output is correct |
10 |
Correct |
3 ms |
14940 KB |
Output is correct |
11 |
Correct |
4 ms |
14940 KB |
Output is correct |
12 |
Correct |
109 ms |
38676 KB |
Output is correct |
13 |
Correct |
222 ms |
54356 KB |
Output is correct |
14 |
Correct |
3 ms |
14680 KB |
Output is correct |
15 |
Correct |
156 ms |
50456 KB |
Output is correct |
16 |
Correct |
172 ms |
54560 KB |
Output is correct |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
3 ms |
14684 KB |
Output is correct |
2 |
Correct |
3 ms |
14680 KB |
Output is correct |
3 |
Correct |
3 ms |
14684 KB |
Output is correct |
4 |
Incorrect |
3 ms |
14684 KB |
Output isn't correct |
5 |
Halted |
0 ms |
0 KB |
- |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
3 ms |
14684 KB |
Output is correct |
2 |
Correct |
3 ms |
14680 KB |
Output is correct |
3 |
Correct |
3 ms |
14684 KB |
Output is correct |
4 |
Incorrect |
3 ms |
14684 KB |
Output isn't correct |
5 |
Halted |
0 ms |
0 KB |
- |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
231 ms |
35968 KB |
Output is correct |
2 |
Correct |
232 ms |
35400 KB |
Output is correct |
3 |
Correct |
233 ms |
36816 KB |
Output is correct |
4 |
Correct |
220 ms |
36576 KB |
Output is correct |
5 |
Correct |
238 ms |
36804 KB |
Output is correct |
6 |
Correct |
230 ms |
35956 KB |
Output is correct |
7 |
Correct |
216 ms |
36528 KB |
Output is correct |
8 |
Correct |
140 ms |
34252 KB |
Output is correct |
9 |
Correct |
206 ms |
42824 KB |
Output is correct |
10 |
Correct |
213 ms |
35912 KB |
Output is correct |
11 |
Correct |
199 ms |
36496 KB |
Output is correct |
12 |
Correct |
202 ms |
35788 KB |
Output is correct |
13 |
Correct |
3 ms |
14684 KB |
Output is correct |
14 |
Correct |
170 ms |
50388 KB |
Output is correct |
15 |
Correct |
196 ms |
54556 KB |
Output is correct |
16 |
Correct |
6 ms |
15196 KB |
Output is correct |
17 |
Correct |
6 ms |
15196 KB |
Output is correct |
18 |
Correct |
6 ms |
15324 KB |
Output is correct |
19 |
Correct |
6 ms |
15196 KB |
Output is correct |
20 |
Correct |
6 ms |
15196 KB |
Output is correct |
21 |
Correct |
128 ms |
33972 KB |
Output is correct |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
231 ms |
35968 KB |
Output is correct |
2 |
Correct |
232 ms |
35400 KB |
Output is correct |
3 |
Correct |
233 ms |
36816 KB |
Output is correct |
4 |
Correct |
220 ms |
36576 KB |
Output is correct |
5 |
Correct |
238 ms |
36804 KB |
Output is correct |
6 |
Correct |
230 ms |
35956 KB |
Output is correct |
7 |
Correct |
216 ms |
36528 KB |
Output is correct |
8 |
Correct |
140 ms |
34252 KB |
Output is correct |
9 |
Correct |
206 ms |
42824 KB |
Output is correct |
10 |
Correct |
213 ms |
35912 KB |
Output is correct |
11 |
Correct |
199 ms |
36496 KB |
Output is correct |
12 |
Correct |
202 ms |
35788 KB |
Output is correct |
13 |
Correct |
3 ms |
14684 KB |
Output is correct |
14 |
Correct |
170 ms |
50388 KB |
Output is correct |
15 |
Correct |
196 ms |
54556 KB |
Output is correct |
16 |
Correct |
6 ms |
15196 KB |
Output is correct |
17 |
Correct |
6 ms |
15196 KB |
Output is correct |
18 |
Correct |
6 ms |
15324 KB |
Output is correct |
19 |
Correct |
6 ms |
15196 KB |
Output is correct |
20 |
Correct |
6 ms |
15196 KB |
Output is correct |
21 |
Correct |
128 ms |
33972 KB |
Output is correct |
22 |
Correct |
3 ms |
14684 KB |
Output is correct |
23 |
Correct |
3 ms |
14684 KB |
Output is correct |
24 |
Correct |
3 ms |
14684 KB |
Output is correct |
25 |
Correct |
200 ms |
33576 KB |
Output is correct |
26 |
Correct |
188 ms |
31800 KB |
Output is correct |
27 |
Correct |
226 ms |
36548 KB |
Output is correct |
28 |
Correct |
273 ms |
36796 KB |
Output is correct |
29 |
Correct |
216 ms |
35268 KB |
Output is correct |
30 |
Correct |
237 ms |
35024 KB |
Output is correct |
31 |
Correct |
248 ms |
35600 KB |
Output is correct |
32 |
Correct |
202 ms |
34640 KB |
Output is correct |
33 |
Correct |
154 ms |
34760 KB |
Output is correct |
34 |
Correct |
235 ms |
36508 KB |
Output is correct |
35 |
Correct |
252 ms |
43644 KB |
Output is correct |
36 |
Correct |
230 ms |
36376 KB |
Output is correct |
37 |
Correct |
217 ms |
35784 KB |
Output is correct |
38 |
Correct |
109 ms |
38676 KB |
Output is correct |
39 |
Correct |
194 ms |
54440 KB |
Output is correct |
40 |
Correct |
6 ms |
15192 KB |
Output is correct |
41 |
Correct |
6 ms |
15196 KB |
Output is correct |
42 |
Correct |
7 ms |
15192 KB |
Output is correct |
43 |
Correct |
5 ms |
15196 KB |
Output is correct |
44 |
Correct |
5 ms |
15192 KB |
Output is correct |
45 |
Correct |
3 ms |
14684 KB |
Output is correct |
46 |
Correct |
3 ms |
14684 KB |
Output is correct |
47 |
Correct |
3 ms |
14832 KB |
Output is correct |
48 |
Correct |
3 ms |
14684 KB |
Output is correct |
49 |
Correct |
3 ms |
14684 KB |
Output is correct |
50 |
Correct |
91 ms |
27220 KB |
Output is correct |
51 |
Correct |
154 ms |
35792 KB |
Output is correct |
52 |
Correct |
209 ms |
35968 KB |
Output is correct |
53 |
Correct |
201 ms |
35384 KB |
Output is correct |
54 |
Correct |
227 ms |
36752 KB |
Output is correct |
55 |
Correct |
235 ms |
36620 KB |
Output is correct |
56 |
Correct |
213 ms |
36804 KB |
Output is correct |
57 |
Correct |
222 ms |
35872 KB |
Output is correct |
58 |
Correct |
226 ms |
36412 KB |
Output is correct |
59 |
Correct |
135 ms |
34248 KB |
Output is correct |
60 |
Correct |
204 ms |
42820 KB |
Output is correct |
61 |
Correct |
218 ms |
36004 KB |
Output is correct |
62 |
Correct |
189 ms |
36552 KB |
Output is correct |
63 |
Correct |
202 ms |
35784 KB |
Output is correct |
64 |
Correct |
3 ms |
14680 KB |
Output is correct |
65 |
Correct |
155 ms |
50496 KB |
Output is correct |
66 |
Correct |
175 ms |
54504 KB |
Output is correct |
67 |
Correct |
6 ms |
15448 KB |
Output is correct |
68 |
Correct |
7 ms |
15444 KB |
Output is correct |
69 |
Correct |
6 ms |
15388 KB |
Output is correct |
70 |
Correct |
6 ms |
15280 KB |
Output is correct |
71 |
Correct |
6 ms |
15292 KB |
Output is correct |
72 |
Correct |
130 ms |
33996 KB |
Output is correct |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
3 ms |
14684 KB |
Output is correct |
2 |
Incorrect |
6 ms |
15196 KB |
Output isn't correct |
3 |
Halted |
0 ms |
0 KB |
- |