using
System;
using
System.Collections.Generic;
class
GFG {
static
int
max_len = Int32.MinValue;
static
void
DFS(List<List<Tuple<
int
,
int
>>> graph,
int
src,
int
prev_len,
bool
[] visited)
{
visited[src] =
true
;
int
curr_len = 0;
Tuple<
int
,
int
> adjacent;
for
(
int
i = 0; i < graph[src].Count; i++)
{
adjacent = graph[src][i];
if
(!visited[adjacent.Item1])
{
curr_len = prev_len + adjacent.Item2;
DFS(graph, adjacent.Item1, curr_len, visited);
}
if
(max_len < curr_len)
{
max_len = curr_len;
}
curr_len = 0;
}
}
static
int
longestCable(List<List<Tuple<
int
,
int
>>> graph,
int
n)
{
for
(
int
i=1; i<=n; i++)
{
bool
[] visited =
new
bool
[n+1];
DFS(graph, i, 0, visited);
}
return
max_len;
}
static
void
Main() {
int
n = 6;
List<List<Tuple<
int
,
int
>>> graph =
new
List<List<Tuple<
int
,
int
>>>();
for
(
int
i = 0; i < n + 1; i++)
{
graph.Add(
new
List<Tuple<
int
,
int
>>());
}
graph[1].Add(
new
Tuple<
int
,
int
>(2, 3));
graph[2].Add(
new
Tuple<
int
,
int
>(1, 3));
graph[2].Add(
new
Tuple<
int
,
int
>(3, 4));
graph[3].Add(
new
Tuple<
int
,
int
>(2, 4));
graph[2].Add(
new
Tuple<
int
,
int
>(6, 2));
graph[6].Add(
new
Tuple<
int
,
int
>(2, 2));
graph[4].Add(
new
Tuple<
int
,
int
>(6, 6));
graph[6].Add(
new
Tuple<
int
,
int
>(4, 6));
graph[5].Add(
new
Tuple<
int
,
int
>(6, 5));
graph[6].Add(
new
Tuple<
int
,
int
>(5, 5));
Console.Write(
"Maximum length of cable = "
+ longestCable(graph, n));
}
}