Kyopro Library
 
読み取り中…
検索中…
一致する文字列を見つけられません
diameter.hpp
[詳解]
1#include"../../../kyopro_library/template.hpp"
2#include"../../../kyopro_library/graph/shortest_path/dijkstra.hpp"
3#include"../../../kyopro_library/graph/shortest_path/bfs.hpp"
4
5pair<vector<int>,ll> TreeDiameter(const vector<vector<pair<int,ll>>>& g) {
6 vector<ll> dist=Dijkstra(g);
7 int s=max_element(dist.begin(),dist.end())-dist.begin();
8 dist=Dijkstra(g,s);
9 int t=max_element(dist.begin(),dist.end())-dist.begin();
10 vector<int> path;
11 int now=t;
12 while(now!=s) {
13 path.push_back(now);
14 for(auto[nxt,cost]:g[now]) {
15 if(dist[now]==dist[nxt]+cost) {
16 now=nxt;
17 break;
18 }
19 }
20 }
21 path.push_back(s);
22 ll diameter=dist[t];
23 return {path,diameter};
24}
25
26pair<vector<int>,ll>TreeDiameter(const vector<vector<int>>& g) {
27 vector<ll> dist=BFS(g);
28 int s=max_element(dist.begin(),dist.end())-dist.begin();
29 dist=BFS(g,s);
30 int t=max_element(dist.begin(),dist.end())-dist.begin();
31 vector<int> path;
32 int now=t;
33 while(now!=s) {
34 path.push_back(now);
35 for(int nxt:g[now]) {
36 if(dist[now]==dist[nxt]+1) {
37 now=nxt;
38 break;
39 }
40 }
41 }
42 path.push_back(s);
43 ll diameter=dist[t];
44 return {path,diameter};
45}
pair< vector< int >, ll > TreeDiameter(const vector< vector< pair< int, ll > > > &g)
Definition diameter.hpp:5