UOJ Logo

NOI.AC

IDProblemSubmitterResultTimeMemoryLanguageFile sizeSubmit timeJudge time
#212835#3829. Ctommy0169ms57748kbC++111.2kb2024-10-20 11:58:272024-10-20 12:47:13

answer

#include <bits/stdc++.h>

using namespace std;
int n;
const int N = 1e6 + 10;
vector<int> a[N];
int dep[N], vis[N];
struct Node {
    int root, siz;
};
vector<Node> so[N];
int siz[N];
bool cmp(Node x, Node y) {
    return x.siz > y.siz;
}
void dfs1(int x) {
    vis[x] = 1;
    for(int v : a[x]) {
        if(vis[x]) continue;
        dep[v] = dep[x] + 1;
        dfs1(v);
        siz[x] += siz[v] + 1;
    }
}
int f[N];
void dfs2(int x) {
    vis[x] = 1;
    int all = 0;
    for(int v : a[x]) {
        if(vis[v]) continue;
        dfs2(v);
        so[x].push_back({v, f[v]});
        all += f[v] + 1;
    }
    if(so[x].size() == 0) f[x] = dep[x];
    else {
        sort(so[x].begin(), so[x].end(), cmp);
        int minn = 0x7fffffff;
        int left = 0;
        for(int i = 1; i < so[x].size(); i++) {
            left += so[x][i].siz;
            minn = min(minn, 2 * (all - left) + left + i * dep[x]);
        }
        f[x] = minn;
    }
} 
int main() {
    scanf("%d", &n);
    for(int i = 1; i < n; i++) {
        int u, v;
        scanf("%d%d", &u, &v);
        a[u].push_back(v);
        a[v].push_back(u);
    }
    dfs1(1);
    memset(vis, 0, sizeof(vis));
    dfs2(1);
    printf("%d\n", f[1]);
}  

Details

小提示:点击横条可展开更详细的信息

Subtask #1:

score: 0
Wrong Answer

Test #1:

score: 0
Wrong Answer
time: 16ms
memory: 52032kb

input:

5
3 1
1 5
2 4
5 4

output:

2

result:

wrong answer 1st numbers differ - expected: '4', found: '2'

Subtask #2:

score: 0
Wrong Answer

Test #4:

score: 0
Wrong Answer
time: 16ms
memory: 52040kb

input:

100
63 38
17 33
44 12
9 66
21 98
2 49
68 67
75 42
78 25
92 6
67 17
90 19
48 51
83 9
20 94
68 4
64 58...

output:

2147483647

result:

wrong answer 1st numbers differ - expected: '167', found: '2147483647'

Subtask #3:

score: 0
Wrong Answer

Test #10:

score: 0
Wrong Answer
time: 22ms
memory: 52092kb

input:

1000
228 978
939 994
911 13
8 806
680 958
779 832
673 924
627 806
354 476
320 218
766 848
171 944
90...

output:

2147483647

result:

wrong answer 1st numbers differ - expected: '1893', found: '2147483647'

Subtask #4:

score: 0
Wrong Answer

Test #16:

score: 0
Wrong Answer
time: 115ms
memory: 57748kb

input:

100000
44881 88880
79640 18741
56510 31493
27649 50461
7015 98523
26337 91384
17594 52397
37312 3409...

output:

10

result:

wrong answer 1st numbers differ - expected: '199052', found: '10'

Subtask #5:

score: 0
Time Limit Exceeded

Test #22:

score: 0
Time Limit Exceeded

input:

1000000
198444 939986
569807 470692
847908 557044
739959 80274
772656 222835
832266 382872
267873 10...

output:


result: