using
System;
using
System.Collections.Generic;
class
Graph
{
public
int
vertices;
public
List<
int
> []edge;
public
Graph(
int
vertices)
{
this
.vertices = vertices;
edge =
new
List<
int
>[vertices + 1];
for
(
int
i = 0; i <= vertices; i++)
{
edge[i] =
new
List<
int
>();
}
}
public
void
addEdge(
int
a,
int
b)
{
edge[a].Add(b);
}
public
void
dfs(
int
node, List<
int
> []adj,
int
[]dp, Boolean []visited)
{
visited[node] =
true
;
for
(
int
i = 0; i < adj[node].Count; i++)
{
if
(!visited[adj[node][i]])
dfs(adj[node][i], adj, dp, visited);
dp[node] = Math.Max(dp[node], 1 +
dp[adj[node][i]]);
}
}
public
int
findLongestPath(
int
n)
{
List<
int
> []adj = edge;
int
[] dp =
new
int
[n + 1];
Boolean[] visited =
new
Boolean[n + 1];
for
(
int
i = 1; i <= n; i++)
{
if
(!visited[i])
dfs(i, adj, dp, visited);
}
int
ans = 0;
for
(
int
i = 1; i <= n; i++)
{
ans = Math.Max(ans, dp[i]);
}
return
ans;
}
}
class
GFG
{
public
static
void
Main(String[] args)
{
int
n = 5;
Graph graph =
new
Graph(n);
graph.addEdge( 1, 2);
graph.addEdge( 1, 3);
graph.addEdge( 3, 2);
graph.addEdge( 2, 4);
graph.addEdge( 3, 4);
graph.findLongestPath(n);
Console.WriteLine(graph.findLongestPath(n));
}
}