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
5
pair
<
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
26
pair
<
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
}
TreeDiameter
pair< vector< int >, ll > TreeDiameter(const vector< vector< pair< int, ll > > > &g)
Definition
diameter.hpp:5
graph
tree
diameter.hpp
構築:
1.13.2