# | 제출 시각 | 아이디 | 문제 | 언어 | 결과 | 실행 시간 | 메모리 |
---|---|---|---|---|---|---|---|
18460 | tlwpdus | 구슬과 끈 (APIO14_beads) | C++98 | 2 ms | 384 KiB |
이 제출은 이전 버전의 oj.uz에서 채점하였습니다. 현재는 제출 당시와는 다른 서버에서 채점을 하기 때문에, 다시 제출하면 결과가 달라질 수도 있습니다.
#include<stdio.h>
#include<algorithm>
#define MAXN 200010
#define MAXM 200010
using namespace std;
int n;
int nxt[MAXM*2], st[MAXN], en[MAXM*2], wei[MAXM*2];
int dyn[MAXN][2];
void dfs(int here, int p, int uew) {
int i, sum = 0, m1 = -2e9, m2 = -2e9;
for (i=st[here];i!=-1;i=nxt[i]) {
int there = en[i];
if (there==p) continue;
dfs(there,here,wei[i]);
sum += dyn[there][1];
int val = dyn[there][0]-dyn[there][1]+wei[i];
if (m1<val) {m2=m1;m1=val;}
else if (m2<val) m2=val;
}
if (m2==-2e9) dyn[here][0] = sum;
else dyn[here][0] = max(sum,sum+m1+m2);
if (m1==-2e9) dyn[here][1] = dyn[here][0];
else dyn[here][1] = max(dyn[here][0],sum+m1+uew);
}
void process() {
dfs(0,-1,0);
printf("%d\n",dyn[0][0]);
}
int ptr = 0;
void add_edge(int u, int v, int w) {
nxt[ptr] = st[u];
wei[ptr] = w;
en[ptr] = v;
st[u] = ptr++;
nxt[ptr] = st[v];
wei[ptr] = w;
en[ptr] = u;
st[v] = ptr++;
}
void input() {
int i;
scanf("%d",&n);
for (i=0;i<n;i++) st[i] = -1;
for (i=0;i<n-1;i++) {
int a, b, w;
scanf("%d %d %d",&a,&b,&w);
add_edge(--a,--b,w);
}
}
int main() {
input();
process();
return 0;
}
컴파일 시 표준 에러 (stderr) 메시지
# | 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... |