알고리즘
[C++] 백준 1167번 : 트리의 지름
88dldl
2024. 2. 27. 04:17
https://www.acmicpc.net/problem/1167
1167번: 트리의 지름
트리가 입력으로 주어진다. 먼저 첫 번째 줄에서는 트리의 정점의 개수 V가 주어지고 (2 ≤ V ≤ 100,000)둘째 줄부터 V개의 줄에 걸쳐 간선의 정보가 다음과 같이 주어진다. 정점 번호는 1부터 V까지
www.acmicpc.net
[코드]
#include <iostream>
#include <vector>
#include <cstring>
using namespace std;
int n,sumof=0,point=0;
vector<pair<int,int>> v[100001];
int visit[100001]={false};
void dfs(int x,int len){
if(visit[x]) return;
visit[x]=true;
if(sumof<len){//최대값 갱신
sumof=len;
point = x;
}
for(int i=0;i<v[x].size();i++){
dfs(v[x][i].first,len+v[x][i].second);
}
}
int main()
{
ios_base::sync_with_stdio(false); cin.tie(NULL);
cin>>n;
for(int i=0;i<n;i++){
int x,z,y;
cin>>x>>y;
if(y==-1) continue;
while(y!=-1){
cin>>z;
v[x].push_back({y,z});
v[y].push_back({x,z});
cin>>y;
}
}
dfs(1,0);
sumof=0;
memset(visit,false,sizeof(visit));
dfs(point,0);
cout<<sumof;
return 0;
}
[ 도움이 되었던 자료 ]
트리의 지름 구하기
트리의 지름
velog.io