#pragma GCC target ("avx2")
#pragma GCC optimize ("O3")
#pragma GCC optimize ("unroll-loops")
#include <bits/stdc++.h>
#define owo(i,a, b) for(int i=(a);i<(b); ++i)
#define uwu(i,a, b) for(int i=(a)-1; i>=(b); --i)
#define senpai push_back
#define ttgl pair<int, int>
#define ayaya cout<<"ayaya~"<<endl
using namespace std;
using ll = long long;
using ld = long double;
const ll MOD = 1000000007;
const ll root = 3;
ll binpow(ll a,ll b){ll res=1;while(b){if(b&1)res=(res*a)%MOD;a=(a*a)%MOD;b>>=1;}return res;}
ll modInv(ll a){return binpow(a, MOD-2);}
const int INF = 0x3f3f3f3f;
const int NINF = 0xc0c0c0c0;
const ll INFLL = 0x3f3f3f3f3f3f3f3f;
const ll NINFLL = 0xc0c0c0c0c0c0c0c0;
const int mxN = 250005;
struct BIT {
int N;
vector<ll> arr;
vector<ll> cnt;
void init(int n) {
N = n;
arr.resize(N+1, 0);
cnt.resize(N+1, 0);
}
void upd(int p, int x) {
p++;
while(p <= N) {
arr[p] += x;
cnt[p]++;
p += p&-p;
}
}
ll qsum(int p) {
ll res = 0;
p++;
while(p > 0) {
res += arr[p];
p -= p&-p;
}
return res;
}
int search (int v) {
int sum = 0;
int pos = 0;
for(int i=16; i>=0; i--) {
if(pos + (1 << i) < N && sum + cnt[pos + (1 << i)] < v) {
sum += cnt[pos + (1 << i)];
pos += (1 << i);
}
}
return pos;
}
ll gethighest(int k) {
//cout << k << " " << N << " higher?" << endl;
if (k == 0)return 0;
int pos = search(k);
return qsum(pos);
}
}bit[mxN];
vector<array<int, 3>> adj[mxN];
int deg[mxN];
bool done[mxN];
vector<int> here;
ll dp[mxN][2]; //dp[0] is cant use, dp[1] is can use
vector<int> all;
ll die[mxN];
ll dfs(int u, int p, int k) {
if (done[u]) return -1;
//cout << u << " in" << endl;
here.push_back(u);
done[u] = 1;
vector<ll> compute;
ll always = 0;
for (int _ = 0; _ < adj[u].size(); _++) {
int v = adj[u][_][0];
int w = adj[u][_][1];
int pos = adj[u][_][2];
if (v == p)continue;
if (deg[v] == k) {
//cout << u << " " << v << " " << pos << " " << w << " bit update\n";
bit[u].upd(pos, w);
continue;
} else if (deg[v] < k) break;
dfs(v, u, k);
always += dp[v][0];
if (dp[v][1] + w - dp[v][0] > 0) {
compute.senpai(dp[v][1] + w - dp[v][0]);
}
}
sort(compute.begin(), compute.end());
dp[u][0] = bit[u].gethighest(k);
dp[u][1] = bit[u].gethighest(k-1);
ll curr = 0;
for (int i = 0; i < compute.size(); i++) {
//cout << i << " " << compute[i] << "\n";
curr += compute[i];
if (k-i-1 >= 0) dp[u][0] = max(dp[u][0], curr + bit[u].gethighest(k-i-1));
if (k-i-2 >= 0) dp[u][1] = max(dp[u][1], curr + bit[u].gethighest(k-i-2));
}
dp[u][0] += always;
dp[u][1] += always;
//cout << u << " out " << dp[u][0] << " " << dp[u][1] << endl;
return dp[u][0];
}
vector<ll> minimum_closure_costs(int n, vector<int> u, vector<int> v, vector<int> w) {
all.resize(n);
iota(all.begin(), all.end(), 0);
ll tot = 0;
for (int i = 0; i < n-1; i++) {
adj[u[i]].senpai({v[i], w[i], 0});
adj[v[i]].senpai({u[i], w[i], 0});
deg[u[i]]++;
deg[v[i]]++;
tot += w[i];
}
for (int i = 0; i < n-1; i++) {
die[max(deg[u[i]], deg[v[i]])] += w[i];
}
for (int i = 1; i < n; i++) {
die[i] += die[i-1];
}
owo(i, 0, n) {
sort(adj[i].begin(), adj[i].end(), [&](array<int, 3> a, array<int, 3> b) {
return a[1] > b[1];
});
for (int j = 0; j < adj[i].size(); j++) {
adj[i][j][2] = j;
}
sort(adj[i].begin(), adj[i].end(), [&](array<int, 3> a, array<int, 3> b) {
return deg[a[0]] > deg[b[0]];
});
bit[i].init(deg[i]);
}
sort(all.begin(), all.end(), [&](int a, int b) {
return deg[a] > deg[b];
});
vector<ll> res(n);
for (int k = 1; k < n; k++) {
for (int i = 0; i < n; i++) {
if (deg[all[i]] <= k)break;
if (!done[all[i]]) {
res[k] += dfs(all[i], -1, k);
}
}
res[k] += die[k];
for (int u : here) {
done[u] = false;
}
here.clear();
}
owo(i, 0, n) {
res[i] = tot - res[i];
}
return res;
}
Compilation message
roads.cpp: In function 'll dfs(int, int, int)':
roads.cpp:81:23: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<std::array<int, 3> >::size_type' {aka 'long unsigned int'} [-Wsign-compare]
81 | for (int _ = 0; _ < adj[u].size(); _++) {
| ~~^~~~~~~~~~~~~~~
roads.cpp:101:23: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<long long int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
101 | for (int i = 0; i < compute.size(); i++) {
| ~~^~~~~~~~~~~~~~~~
roads.cpp: In function 'std::vector<long long int> minimum_closure_costs(int, std::vector<int>, std::vector<int>, std::vector<int>)':
roads.cpp:133:27: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<std::array<int, 3> >::size_type' {aka 'long unsigned int'} [-Wsign-compare]
133 | for (int j = 0; j < adj[i].size(); j++) {
| ~~^~~~~~~~~~~~~~~
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
11 ms |
19788 KB |
Output is correct |
2 |
Correct |
13 ms |
20148 KB |
Output is correct |
3 |
Correct |
14 ms |
20280 KB |
Output is correct |
4 |
Correct |
13 ms |
20172 KB |
Output is correct |
5 |
Correct |
11 ms |
19876 KB |
Output is correct |
6 |
Correct |
11 ms |
19888 KB |
Output is correct |
7 |
Correct |
11 ms |
19848 KB |
Output is correct |
8 |
Correct |
11 ms |
20172 KB |
Output is correct |
9 |
Correct |
12 ms |
20172 KB |
Output is correct |
10 |
Correct |
10 ms |
19880 KB |
Output is correct |
11 |
Correct |
12 ms |
19880 KB |
Output is correct |
12 |
Correct |
68 ms |
30588 KB |
Output is correct |
13 |
Correct |
109 ms |
37680 KB |
Output is correct |
14 |
Correct |
105 ms |
36544 KB |
Output is correct |
15 |
Correct |
114 ms |
38360 KB |
Output is correct |
16 |
Correct |
136 ms |
38732 KB |
Output is correct |
17 |
Correct |
126 ms |
38852 KB |
Output is correct |
18 |
Correct |
10 ms |
19788 KB |
Output is correct |
19 |
Correct |
93 ms |
35948 KB |
Output is correct |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
11 ms |
19788 KB |
Output is correct |
2 |
Incorrect |
82 ms |
44656 KB |
Output isn't correct |
3 |
Halted |
0 ms |
0 KB |
- |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
12 ms |
19884 KB |
Output is correct |
2 |
Correct |
11 ms |
19788 KB |
Output is correct |
3 |
Correct |
13 ms |
19864 KB |
Output is correct |
4 |
Incorrect |
12 ms |
19884 KB |
Output isn't correct |
5 |
Halted |
0 ms |
0 KB |
- |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
12 ms |
19884 KB |
Output is correct |
2 |
Correct |
11 ms |
19788 KB |
Output is correct |
3 |
Correct |
13 ms |
19864 KB |
Output is correct |
4 |
Incorrect |
12 ms |
19884 KB |
Output isn't correct |
5 |
Halted |
0 ms |
0 KB |
- |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
125 ms |
38236 KB |
Output is correct |
2 |
Correct |
164 ms |
38340 KB |
Output is correct |
3 |
Correct |
114 ms |
39736 KB |
Output is correct |
4 |
Correct |
131 ms |
39228 KB |
Output is correct |
5 |
Correct |
117 ms |
39748 KB |
Output is correct |
6 |
Correct |
99 ms |
38340 KB |
Output is correct |
7 |
Correct |
115 ms |
39668 KB |
Output is correct |
8 |
Correct |
94 ms |
36612 KB |
Output is correct |
9 |
Correct |
144 ms |
43972 KB |
Output is correct |
10 |
Correct |
130 ms |
38960 KB |
Output is correct |
11 |
Correct |
106 ms |
39844 KB |
Output is correct |
12 |
Correct |
109 ms |
38240 KB |
Output is correct |
13 |
Correct |
11 ms |
19888 KB |
Output is correct |
14 |
Correct |
76 ms |
47036 KB |
Output is correct |
15 |
Correct |
85 ms |
49944 KB |
Output is correct |
16 |
Correct |
13 ms |
20280 KB |
Output is correct |
17 |
Correct |
13 ms |
20172 KB |
Output is correct |
18 |
Correct |
13 ms |
20172 KB |
Output is correct |
19 |
Correct |
13 ms |
20152 KB |
Output is correct |
20 |
Correct |
13 ms |
20172 KB |
Output is correct |
21 |
Correct |
93 ms |
35960 KB |
Output is correct |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
125 ms |
38236 KB |
Output is correct |
2 |
Correct |
164 ms |
38340 KB |
Output is correct |
3 |
Correct |
114 ms |
39736 KB |
Output is correct |
4 |
Correct |
131 ms |
39228 KB |
Output is correct |
5 |
Correct |
117 ms |
39748 KB |
Output is correct |
6 |
Correct |
99 ms |
38340 KB |
Output is correct |
7 |
Correct |
115 ms |
39668 KB |
Output is correct |
8 |
Correct |
94 ms |
36612 KB |
Output is correct |
9 |
Correct |
144 ms |
43972 KB |
Output is correct |
10 |
Correct |
130 ms |
38960 KB |
Output is correct |
11 |
Correct |
106 ms |
39844 KB |
Output is correct |
12 |
Correct |
109 ms |
38240 KB |
Output is correct |
13 |
Correct |
11 ms |
19888 KB |
Output is correct |
14 |
Correct |
76 ms |
47036 KB |
Output is correct |
15 |
Correct |
85 ms |
49944 KB |
Output is correct |
16 |
Correct |
13 ms |
20280 KB |
Output is correct |
17 |
Correct |
13 ms |
20172 KB |
Output is correct |
18 |
Correct |
13 ms |
20172 KB |
Output is correct |
19 |
Correct |
13 ms |
20152 KB |
Output is correct |
20 |
Correct |
13 ms |
20172 KB |
Output is correct |
21 |
Correct |
93 ms |
35960 KB |
Output is correct |
22 |
Correct |
11 ms |
19764 KB |
Output is correct |
23 |
Correct |
13 ms |
19836 KB |
Output is correct |
24 |
Correct |
12 ms |
19884 KB |
Output is correct |
25 |
Incorrect |
139 ms |
36488 KB |
Output isn't correct |
26 |
Halted |
0 ms |
0 KB |
- |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
11 ms |
19788 KB |
Output is correct |
2 |
Correct |
13 ms |
20148 KB |
Output is correct |
3 |
Correct |
14 ms |
20280 KB |
Output is correct |
4 |
Correct |
13 ms |
20172 KB |
Output is correct |
5 |
Correct |
11 ms |
19876 KB |
Output is correct |
6 |
Correct |
11 ms |
19888 KB |
Output is correct |
7 |
Correct |
11 ms |
19848 KB |
Output is correct |
8 |
Correct |
11 ms |
20172 KB |
Output is correct |
9 |
Correct |
12 ms |
20172 KB |
Output is correct |
10 |
Correct |
10 ms |
19880 KB |
Output is correct |
11 |
Correct |
12 ms |
19880 KB |
Output is correct |
12 |
Correct |
68 ms |
30588 KB |
Output is correct |
13 |
Correct |
109 ms |
37680 KB |
Output is correct |
14 |
Correct |
105 ms |
36544 KB |
Output is correct |
15 |
Correct |
114 ms |
38360 KB |
Output is correct |
16 |
Correct |
136 ms |
38732 KB |
Output is correct |
17 |
Correct |
126 ms |
38852 KB |
Output is correct |
18 |
Correct |
10 ms |
19788 KB |
Output is correct |
19 |
Correct |
93 ms |
35948 KB |
Output is correct |
20 |
Correct |
11 ms |
19788 KB |
Output is correct |
21 |
Incorrect |
82 ms |
44656 KB |
Output isn't correct |
22 |
Halted |
0 ms |
0 KB |
- |