이 제출은 이전 버전의 oj.uz에서 채점하였습니다. 현재는 제출 당시와는 다른 서버에서 채점을 하기 때문에, 다시 제출하면 결과가 달라질 수도 있습니다.
#include <iostream>
#include <vector>
using namespace std;
#define endl "\n"
#define ll long long
const ll inf = 1e9 + 69;
const int MX = 200005;
int n;
ll parw[MX], dp[MX][2][2];
vector<pair<int, ll> > adj[MX];
void dfs(int nw, int bf = -1){
if(adj[nw].size() == 1 && bf != -1) return;
ll res = 0ll;
ll best_par_mid = -inf;
ll best_mid = -inf, best_mid2 = -inf;
int best_mid_child, best_mid2_child;
ll best_nomid = -inf, best_nomid2 = -inf;
int best_nomid_child, best_nomid2_child;
for(pair<int, ll> i : adj[nw]) if(i.first != bf){
int nx = i.first; ll wt = i.second;
parw[nx] = wt;
dfs(nx, nw);
ll nomidv = max(dp[nx][0][0], dp[nx][1][0]),
midv = max(dp[nx][0][1], dp[nx][1][1]) - nomidv;
res += nomidv;
if(best_par_mid < midv) best_par_mid = midv;
ll unuse_midv = dp[nx][0][1] + wt - nomidv;
if(best_mid < unuse_midv){
best_mid2 = best_mid;
best_mid2_child = best_mid_child;
best_mid = unuse_midv;
best_mid_child = nx;
}else if(best_mid2 < unuse_midv){
best_mid2 = unuse_midv;
best_mid2_child = nx;
}
ll unuse_nomidv = dp[nx][0][0] + wt - nomidv;
if(best_nomid < unuse_nomidv){
best_nomid2 = best_nomid;
best_nomid2_child = best_nomid_child;
best_nomid = unuse_nomidv;
best_nomid_child = nx;
}else if(best_nomid2 < unuse_nomidv){
best_nomid2 = unuse_nomidv;
best_nomid2_child = nx;
}
}
dp[nw][0][0] = res;
dp[nw][0][1] = max(res + max(0ll, best_par_mid), res + best_nomid + best_nomid2);
if(best_mid_child != best_nomid_child)
dp[nw][0][1] = max(dp[nw][0][1], res + best_nomid + best_mid);
else
dp[nw][0][1] = max(dp[nw][0][1], max(res + best_nomid + best_mid2, res + best_nomid2 + best_mid));
dp[nw][1][0] = res + parw[nw] + best_nomid;
dp[nw][1][1] = res + parw[nw] + best_mid;
return;
}
int main(){
cin.tie(0) -> sync_with_stdio(0);
cin >> n; ll tw;
for(int u, v, i = 1; i < n; i ++){
cin >> u >> v >> tw;
adj[u].push_back({v, tw});
adj[v].push_back({u, tw});
}
dfs(1);
cout << max(dp[1][0][0], dp[1][0][1]) << "\n";
return 0;
}
컴파일 시 표준 에러 (stderr) 메시지
beads.cpp: In function 'void dfs(int, int)':
beads.cpp:20:22: warning: variable 'best_mid2_child' set but not used [-Wunused-but-set-variable]
20 | int best_mid_child, best_mid2_child;
| ^~~~~~~~~~~~~~~
beads.cpp:22:24: warning: variable 'best_nomid2_child' set but not used [-Wunused-but-set-variable]
22 | int best_nomid_child, best_nomid2_child;
| ^~~~~~~~~~~~~~~~~
beads.cpp:61:2: warning: 'best_nomid_child' may be used uninitialized in this function [-Wmaybe-uninitialized]
61 | if(best_mid_child != best_nomid_child)
| ^~
beads.cpp:61:2: warning: 'best_mid_child' may be used uninitialized in this function [-Wmaybe-uninitialized]
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |