답안 #550391

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
550391 2022-04-18T03:12:30 Z Duy_e 구슬과 끈 (APIO14_beads) C++14
28 / 100
1000 ms 5332 KB
/*
**  TASK:
**  LINK:
*/

#include <bits/stdc++.h>
#define ll long long
#define pii pair<ll, ll>
#define st first
#define nd second
#define file "test"
using namespace std;
const long long INF = 1e18;
const long long N = 2e5 + 5;

struct edge {
    ll u, v, w;
} g[N];

vector <int> d[N];

int n;
ll dp[N][2];

/*
    0: là node được nối với dây đỏ
    1: là node được thêm sau 2 node trước
*/

void dfs(int p, int u) {

    ll s0 = 0;
    vector <int> f; f.push_back(0);
    for (int i: d[u]) {
        int v = g[i].u ^ g[i].v ^ u;
        int w = g[i].w;
        if (v == p) continue;
        dfs(u, v);
        s0 += dp[v][0];
        f.push_back(f.back() + max(dp[v][0], dp[v][1] + w));
    }

    f.push_back(f.back());

    dp[u][0] = s0;
    int pos = 1;
    for (int i: d[u]) {
        int v = g[i].u ^ g[i].v ^ u;
        int w = g[i].w;

        if (v == p) continue;

        dp[u][1] = max(dp[u][1], f[pos - 1] + f[f.size() - 1] - f[pos] + dp[v][0] + w);
        dp[u][0] = max(dp[u][0] + dp[v][1] + w - dp[v][0], dp[u][0]);
        pos ++;
    }

    // cout << u << ": " << dp[u][0] << ' ' << dp[u][1] << ' ' << d[u].size() << '\n';
}


int main()
{
    ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0);
    // #ifndef ONLINE_JUDGE
    //     freopen(file".inp", "r", stdin); freopen(file".out", "w", stdout);
    // #endif

    cin >> n;
    for (int i = 1; i < n; i ++) {
        cin >> g[i].u >> g[i].v >> g[i].w;
        d[g[i].u].push_back(i);
        d[g[i].v].push_back(i);
    }

    ll ans = 0;

    for (int i = 1; i <= n; i ++) {
        for (int j = 0; j <= n; j ++)
            dp[j][0] = dp[j][1] = -INF;
        dfs(0, i);

        ans = max(ans, dp[i][0]);
        // cout << i << ' ' << dp[i][0] << '\n';
    }

    cout << ans;

    return 0;
}
/**  /\_/\
*   (= ._.)
*   / >🍵 \>🍮

1 node chỉ có thể được nối với tối đa là 2 dây xanh và chỉ có thể có đúng 2 dây xanh liên tiếp?



2 thao tác:
+ append(w, v): gắn nút w mới vào một nút v "ĐÃ TỒN TẠI"
-> nếu fix root của 1 subtree root v thì v không thể được thêm vào sau 2 nút con được

+ insert(w, u, v): gắn nút w mới vào giữa 2 nút u, v "ĐÃ TỒN TẠI"

3 sub đầu dp n ^ 2 -> solve for each root

**/

Compilation message

beads.cpp:91:9: warning: "/*" within comment [-Wcomment]
   91 | /**  /\_/\
      |
# 결과 실행 시간 메모리 Grader output
1 Correct 3 ms 4948 KB Output is correct
2 Correct 3 ms 5028 KB Output is correct
3 Correct 3 ms 5124 KB Output is correct
4 Correct 3 ms 4940 KB Output is correct
5 Correct 3 ms 4948 KB Output is correct
6 Correct 4 ms 4948 KB Output is correct
7 Correct 4 ms 4948 KB Output is correct
8 Correct 3 ms 4948 KB Output is correct
9 Correct 3 ms 5028 KB Output is correct
10 Correct 3 ms 4948 KB Output is correct
11 Correct 3 ms 5028 KB Output is correct
12 Correct 3 ms 4948 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 3 ms 4948 KB Output is correct
2 Correct 3 ms 5028 KB Output is correct
3 Correct 3 ms 5124 KB Output is correct
4 Correct 3 ms 4940 KB Output is correct
5 Correct 3 ms 4948 KB Output is correct
6 Correct 4 ms 4948 KB Output is correct
7 Correct 4 ms 4948 KB Output is correct
8 Correct 3 ms 4948 KB Output is correct
9 Correct 3 ms 5028 KB Output is correct
10 Correct 3 ms 4948 KB Output is correct
11 Correct 3 ms 5028 KB Output is correct
12 Correct 3 ms 4948 KB Output is correct
13 Correct 4 ms 5036 KB Output is correct
14 Correct 4 ms 4948 KB Output is correct
15 Correct 4 ms 5032 KB Output is correct
16 Correct 8 ms 5028 KB Output is correct
17 Correct 7 ms 5032 KB Output is correct
18 Correct 7 ms 4948 KB Output is correct
19 Correct 6 ms 5076 KB Output is correct
20 Correct 8 ms 4948 KB Output is correct
21 Correct 7 ms 5028 KB Output is correct
22 Correct 7 ms 5032 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 3 ms 4948 KB Output is correct
2 Correct 3 ms 5028 KB Output is correct
3 Correct 3 ms 5124 KB Output is correct
4 Correct 3 ms 4940 KB Output is correct
5 Correct 3 ms 4948 KB Output is correct
6 Correct 4 ms 4948 KB Output is correct
7 Correct 4 ms 4948 KB Output is correct
8 Correct 3 ms 4948 KB Output is correct
9 Correct 3 ms 5028 KB Output is correct
10 Correct 3 ms 4948 KB Output is correct
11 Correct 3 ms 5028 KB Output is correct
12 Correct 3 ms 4948 KB Output is correct
13 Correct 4 ms 5036 KB Output is correct
14 Correct 4 ms 4948 KB Output is correct
15 Correct 4 ms 5032 KB Output is correct
16 Correct 8 ms 5028 KB Output is correct
17 Correct 7 ms 5032 KB Output is correct
18 Correct 7 ms 4948 KB Output is correct
19 Correct 6 ms 5076 KB Output is correct
20 Correct 8 ms 4948 KB Output is correct
21 Correct 7 ms 5028 KB Output is correct
22 Correct 7 ms 5032 KB Output is correct
23 Execution timed out 1082 ms 5332 KB Time limit exceeded
24 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 3 ms 4948 KB Output is correct
2 Correct 3 ms 5028 KB Output is correct
3 Correct 3 ms 5124 KB Output is correct
4 Correct 3 ms 4940 KB Output is correct
5 Correct 3 ms 4948 KB Output is correct
6 Correct 4 ms 4948 KB Output is correct
7 Correct 4 ms 4948 KB Output is correct
8 Correct 3 ms 4948 KB Output is correct
9 Correct 3 ms 5028 KB Output is correct
10 Correct 3 ms 4948 KB Output is correct
11 Correct 3 ms 5028 KB Output is correct
12 Correct 3 ms 4948 KB Output is correct
13 Correct 4 ms 5036 KB Output is correct
14 Correct 4 ms 4948 KB Output is correct
15 Correct 4 ms 5032 KB Output is correct
16 Correct 8 ms 5028 KB Output is correct
17 Correct 7 ms 5032 KB Output is correct
18 Correct 7 ms 4948 KB Output is correct
19 Correct 6 ms 5076 KB Output is correct
20 Correct 8 ms 4948 KB Output is correct
21 Correct 7 ms 5028 KB Output is correct
22 Correct 7 ms 5032 KB Output is correct
23 Execution timed out 1082 ms 5332 KB Time limit exceeded
24 Halted 0 ms 0 KB -