168922025-05-15 16:51:51BucsMateEnergiatakarékos ellenőrzéscpp17Accepted 100/100131ms13884 KiB
#include <iostream>
#include <vector>
using namespace std;

const int maxn = 1e5+5;

vector<int> adj[maxn];
long long dp[maxn][2] = {};
int meret[maxn];

void dfs(int v, int p){
    meret[v] = 1;

    for(int x:adj[v]){
        if(x != p){
            dfs(x,v);
            meret[v] += meret[x];
            //dp[i][0] a megoldas az i reszfajaban
            //dp[i][1] a megoldas az i reszfajaban ha az i-t bekapcsolva hagyjuk mielőtt végig lemennénk
            //ha kikapcsoljuk, annak koltsege oda-vissza +8 a lepegetesek miatt
            dp[v][0] += min(dp[x][0]+8, dp[x][0]+2*meret[x]);
            dp[v][1] += dp[x][0]+2*meret[x];
        }
    }
}

int main(){
    int n;
    cin >> n;
    for(int i = 1; i < n; i++){
        int a, b; 
        cin >> a >> b;
        adj[a].push_back(b);
        adj[b].push_back(a);
    }

    dfs(1,0);

    cout << dp[1][0] << endl;
}
SubtaskSumTestVerdictTimeMemory
subtask10/0
1Accepted3ms2612 KiB
2Accepted103ms7732 KiB
subtask25/5
3Accepted83ms6520 KiB
4Accepted68ms6572 KiB
5Accepted83ms6664 KiB
6Accepted68ms6572 KiB
7Accepted67ms6572 KiB
subtask315/15
8Accepted3ms2612 KiB
9Accepted3ms2612 KiB
10Accepted4ms2612 KiB
11Accepted3ms2612 KiB
12Accepted3ms2616 KiB
13Accepted3ms2612 KiB
14Accepted3ms2612 KiB
subtask415/15
15Accepted3ms2808 KiB
16Accepted3ms2852 KiB
17Accepted3ms2612 KiB
18Accepted3ms2612 KiB
19Accepted3ms2532 KiB
20Accepted3ms2724 KiB
21Accepted3ms2724 KiB
subtask565/65
22Accepted97ms7808 KiB
23Accepted96ms7944 KiB
24Accepted119ms7732 KiB
25Accepted120ms7928 KiB
26Accepted98ms7756 KiB
27Accepted115ms12596 KiB
28Accepted118ms13884 KiB
29Accepted131ms10344 KiB
30Accepted104ms8848 KiB
31Accepted125ms7804 KiB
32Accepted103ms7808 KiB
33Accepted105ms7664 KiB
34Accepted82ms6572 KiB
35Accepted93ms6556 KiB
36Accepted82ms6544 KiB
37Accepted97ms6620 KiB
38Accepted98ms7132 KiB
39Accepted86ms8252 KiB
40Accepted90ms8244 KiB