메뉴 건너뛰기

Programing

BAEKJOON

2132

관리자 2019.12.21 11:45 조회 수 : 7

C++

#include <cstdio>

#include <algorithm>

#include <vector>

using namespace std;

struct Edge{

    int v;

    int f;

};

int N;

int vtx[10010];

vector<Edge> edge[10010];

//int dt[10010][10010]; // 400MB ->MLE

 

int DFS(int v,int parent){

    int max_=0;

    for(auto &e: edge[v]){

        if(e.v==parent)

            continue;

        if(e.f == -1)

            e.f = DFS(e.v, v);

        max_=max(max_,e.f);

    }

    return max_ + vtx[v];

}

int main()

{

    scanf("%d",&N);

    for(int i=1;i<=N;i++){

        scanf("%d",&vtx[i]);

    }

    for(int i=0;i<N-1;i++){

        int a,b;

        scanf("%d %d",&a,&b);

        edge[a].push_back({b,-1});

        edge[b].push_back({a,-1});

    }

    int idx;

    int max_ = -1;

    for(int i=1;i<=N;i++){

        int a=DFS(i,0);

        if(max_<a){

            idx=i;

            max_=a;

        }

    }

    printf("%d %d",max_,idx);

    return 0;

}

번호 제목 글쓴이 날짜 조회 수
공지 안내사항 관리자 2019.12.21 163
45 2468 관리자 2019.12.21 8
44 2458 관리자 2020.04.11 44
43 2457 관리자 2020.04.11 47
42 2454 관리자 2020.04.11 43
41 2450 관리자 2020.04.11 40
40 2339 관리자 2020.04.11 41
39 2307 관리자 2019.12.21 8
38 2250 관리자 2019.12.21 8
37 2233 관리자 2019.12.21 6
36 2170 관리자 2019.12.21 7
» 2132 관리자 2019.12.21 7
34 2096 관리자 2019.12.21 8
33 2042 관리자 2020.04.11 45
32 2003 관리자 2020.04.11 39
31 1991 관리자 2019.12.21 8
30 1967 관리자 2019.12.21 6
29 1966 관리자 2020.04.11 45
28 1946 관리자 2020.04.11 39
27 1874 관리자 2020.04.11 43
26 1839 관리자 2020.04.11 44
25 17611 관리자 2019.12.21 7
24 1753 관리자 2019.12.21 8
23 1742 관리자 2020.04.11 6
22 1720 관리자 2020.04.11 6
21 16210 관리자 2020.04.11 57
20 16201 관리자 2020.04.11 44
19 15971 관리자 2019.12.21 6
18 14865 관리자 2019.12.21 8
17 14503 관리자 2019.12.21 7
16 14502 관리자 2019.12.21 6
위로