#include<bits/stdc++.h>
using namespace std;
#define int long long
const int N=2e5+10, inf=1e18;
int f[N][2][3][3];
vector<pair<int, int>> g[N];
void dfs(int u, int p){
int wpar=0;
for (int i=0; i<(int)g[u].size(); ++i) if (g[u][i].first==p){
wpar=g[u][i].second;
g[u].erase(g[u].begin()+i);
break;
}
for (auto &e:g[u]) dfs(e.first, u);
vector<int> sum(3);
for (auto &e:g[u]){
int v=e.first;
for (int i=0; i<3; ++i) sum[i]+=max(f[v][0][i][0], f[v][1][i][1]);
}
f[u][0][0][0]=sum[0];
if ((int)g[u].size()>=2){
vector<vector<pair<int, int>>> diff(3);
for (auto &e:g[u]){
int v=e.first, w=e.second;
for (int i=0; i<3; ++i) diff[i].emplace_back(f[v][0][1][i]+w-max(f[v][0][1][0], f[v][1][1][1]), v);
}
for (int i=0; i<3; ++i) sort(diff[i].rbegin(), diff[i].rend());
int mxdiff=-inf;
for (int c2=0; c2<3; ++c2){
int c1=0;
for (int i1=0; i1<2; ++i1) for (int i2=0; i2<2; ++i2) if (diff[c1][i1].second!=diff[c2][i2].second){
mxdiff=max(mxdiff, diff[c1][i1].first+diff[c2][i2].first);
}
}
f[u][0][0][1]=sum[1]+mxdiff;
}
if (g[u].size()){
vector<int> diff;
for (auto &e:g[u]){
int v=e.first;
diff.push_back(max({f[v][0][2][1], f[v][0][2][2], f[v][1][2][1]})-max(f[v][0][0][0], f[v][1][0][1]));
}
sort(diff.rbegin(), diff.rend());
f[u][0][0][2]=sum[0]+diff[0];
}
if (p && g[u].size()){
vector<int> diff;
for (auto &e:g[u]){
int v=e.first, w=e.second;
diff.push_back(f[v][0][1][0]+w+wpar-max(f[v][0][1][0], f[v][1][1][1]));
}
sort(diff.rbegin(), diff.rend());
f[u][1][0][1]=sum[1]+diff[0];
}
if (p && g[u].size()){
vector<int> diff;
for (auto &e:g[u]){
int v=e.first, w=e.second;
diff.push_back(max(f[v][0][1][1], f[v][0][1][2])+w+wpar-max(f[v][0][1][0], f[v][1][1][1]));
}
sort(diff.rbegin(), diff.rend());
f[u][1][2][1]=sum[1]+diff[0];
}
for (int i=0; i<2; ++i) for (int j=0; j<3; ++j){
f[u][i][1][j]=max(f[u][i][1][j], f[u][i][0][j]);
f[u][i][2][j]=max(f[u][i][2][j], f[u][i][0][j]);
}
}
int32_t main(){
ios_base::sync_with_stdio(false);
cin.tie(nullptr);
int n;
cin >> n;
for (int i=1; i<n; ++i){
int u, v, w; cin >> u >> v >> w;
g[u].emplace_back(v, w);
g[v].emplace_back(u, w);
}
dfs(1, 0);
cout << max({f[1][0][0][0], f[1][0][0][1], f[1][0][0][2]});
return 0;
}
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
1 ms |
6748 KB |
Output is correct |
2 |
Correct |
2 ms |
6748 KB |
Output is correct |
3 |
Correct |
2 ms |
6748 KB |
Output is correct |
4 |
Correct |
1 ms |
6748 KB |
Output is correct |
5 |
Correct |
2 ms |
6744 KB |
Output is correct |
6 |
Correct |
1 ms |
6748 KB |
Output is correct |
7 |
Correct |
2 ms |
6748 KB |
Output is correct |
8 |
Correct |
2 ms |
6748 KB |
Output is correct |
9 |
Correct |
1 ms |
6748 KB |
Output is correct |
10 |
Correct |
2 ms |
6756 KB |
Output is correct |
11 |
Correct |
1 ms |
6748 KB |
Output is correct |
12 |
Correct |
2 ms |
6748 KB |
Output is correct |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
1 ms |
6748 KB |
Output is correct |
2 |
Correct |
2 ms |
6748 KB |
Output is correct |
3 |
Correct |
2 ms |
6748 KB |
Output is correct |
4 |
Correct |
1 ms |
6748 KB |
Output is correct |
5 |
Correct |
2 ms |
6744 KB |
Output is correct |
6 |
Correct |
1 ms |
6748 KB |
Output is correct |
7 |
Correct |
2 ms |
6748 KB |
Output is correct |
8 |
Correct |
2 ms |
6748 KB |
Output is correct |
9 |
Correct |
1 ms |
6748 KB |
Output is correct |
10 |
Correct |
2 ms |
6756 KB |
Output is correct |
11 |
Correct |
1 ms |
6748 KB |
Output is correct |
12 |
Correct |
2 ms |
6748 KB |
Output is correct |
13 |
Correct |
2 ms |
6748 KB |
Output is correct |
14 |
Correct |
2 ms |
6748 KB |
Output is correct |
15 |
Correct |
2 ms |
6744 KB |
Output is correct |
16 |
Correct |
2 ms |
6744 KB |
Output is correct |
17 |
Correct |
2 ms |
6748 KB |
Output is correct |
18 |
Correct |
1 ms |
6748 KB |
Output is correct |
19 |
Correct |
1 ms |
6744 KB |
Output is correct |
20 |
Correct |
2 ms |
6744 KB |
Output is correct |
21 |
Correct |
1 ms |
6748 KB |
Output is correct |
22 |
Correct |
2 ms |
6752 KB |
Output is correct |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
1 ms |
6748 KB |
Output is correct |
2 |
Correct |
2 ms |
6748 KB |
Output is correct |
3 |
Correct |
2 ms |
6748 KB |
Output is correct |
4 |
Correct |
1 ms |
6748 KB |
Output is correct |
5 |
Correct |
2 ms |
6744 KB |
Output is correct |
6 |
Correct |
1 ms |
6748 KB |
Output is correct |
7 |
Correct |
2 ms |
6748 KB |
Output is correct |
8 |
Correct |
2 ms |
6748 KB |
Output is correct |
9 |
Correct |
1 ms |
6748 KB |
Output is correct |
10 |
Correct |
2 ms |
6756 KB |
Output is correct |
11 |
Correct |
1 ms |
6748 KB |
Output is correct |
12 |
Correct |
2 ms |
6748 KB |
Output is correct |
13 |
Correct |
2 ms |
6748 KB |
Output is correct |
14 |
Correct |
2 ms |
6748 KB |
Output is correct |
15 |
Correct |
2 ms |
6744 KB |
Output is correct |
16 |
Correct |
2 ms |
6744 KB |
Output is correct |
17 |
Correct |
2 ms |
6748 KB |
Output is correct |
18 |
Correct |
1 ms |
6748 KB |
Output is correct |
19 |
Correct |
1 ms |
6744 KB |
Output is correct |
20 |
Correct |
2 ms |
6744 KB |
Output is correct |
21 |
Correct |
1 ms |
6748 KB |
Output is correct |
22 |
Correct |
2 ms |
6752 KB |
Output is correct |
23 |
Correct |
5 ms |
7004 KB |
Output is correct |
24 |
Correct |
4 ms |
7004 KB |
Output is correct |
25 |
Correct |
4 ms |
7004 KB |
Output is correct |
26 |
Correct |
7 ms |
7256 KB |
Output is correct |
27 |
Correct |
6 ms |
7256 KB |
Output is correct |
28 |
Correct |
8 ms |
8240 KB |
Output is correct |
29 |
Correct |
8 ms |
7656 KB |
Output is correct |
30 |
Correct |
8 ms |
7572 KB |
Output is correct |
31 |
Correct |
8 ms |
8536 KB |
Output is correct |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
1 ms |
6748 KB |
Output is correct |
2 |
Correct |
2 ms |
6748 KB |
Output is correct |
3 |
Correct |
2 ms |
6748 KB |
Output is correct |
4 |
Correct |
1 ms |
6748 KB |
Output is correct |
5 |
Correct |
2 ms |
6744 KB |
Output is correct |
6 |
Correct |
1 ms |
6748 KB |
Output is correct |
7 |
Correct |
2 ms |
6748 KB |
Output is correct |
8 |
Correct |
2 ms |
6748 KB |
Output is correct |
9 |
Correct |
1 ms |
6748 KB |
Output is correct |
10 |
Correct |
2 ms |
6756 KB |
Output is correct |
11 |
Correct |
1 ms |
6748 KB |
Output is correct |
12 |
Correct |
2 ms |
6748 KB |
Output is correct |
13 |
Correct |
2 ms |
6748 KB |
Output is correct |
14 |
Correct |
2 ms |
6748 KB |
Output is correct |
15 |
Correct |
2 ms |
6744 KB |
Output is correct |
16 |
Correct |
2 ms |
6744 KB |
Output is correct |
17 |
Correct |
2 ms |
6748 KB |
Output is correct |
18 |
Correct |
1 ms |
6748 KB |
Output is correct |
19 |
Correct |
1 ms |
6744 KB |
Output is correct |
20 |
Correct |
2 ms |
6744 KB |
Output is correct |
21 |
Correct |
1 ms |
6748 KB |
Output is correct |
22 |
Correct |
2 ms |
6752 KB |
Output is correct |
23 |
Correct |
5 ms |
7004 KB |
Output is correct |
24 |
Correct |
4 ms |
7004 KB |
Output is correct |
25 |
Correct |
4 ms |
7004 KB |
Output is correct |
26 |
Correct |
7 ms |
7256 KB |
Output is correct |
27 |
Correct |
6 ms |
7256 KB |
Output is correct |
28 |
Correct |
8 ms |
8240 KB |
Output is correct |
29 |
Correct |
8 ms |
7656 KB |
Output is correct |
30 |
Correct |
8 ms |
7572 KB |
Output is correct |
31 |
Correct |
8 ms |
8536 KB |
Output is correct |
32 |
Correct |
31 ms |
16220 KB |
Output is correct |
33 |
Correct |
34 ms |
16288 KB |
Output is correct |
34 |
Correct |
29 ms |
16228 KB |
Output is correct |
35 |
Correct |
167 ms |
47096 KB |
Output is correct |
36 |
Correct |
156 ms |
47036 KB |
Output is correct |
37 |
Correct |
169 ms |
46984 KB |
Output is correct |
38 |
Correct |
203 ms |
58692 KB |
Output is correct |
39 |
Correct |
200 ms |
52832 KB |
Output is correct |
40 |
Correct |
189 ms |
50288 KB |
Output is correct |
41 |
Correct |
205 ms |
64324 KB |
Output is correct |