using
System;
using
System.Collections.Generic;
class
GFG
{
static
int
N = 100000;
static
List<
int
>[] gr1 =
new
List<
int
>[N];
static
List<
int
>[] gr2 =
new
List<
int
>[N];
static
bool
[] vis1 =
new
bool
[N];
static
bool
[] vis2 =
new
bool
[N];
static
void
Add_edge(
int
u,
int
v)
{
gr1[u].Add(v);
gr2[v].Add(u);
}
static
void
dfs1(
int
x)
{
vis1[x] =
true
;
foreach
(
int
i
in
gr1[x])
if
(!vis1[i])
dfs1(i);
}
static
void
dfs2(
int
x)
{
vis2[x] =
true
;
foreach
(
int
i
in
gr2[x])
if
(!vis2[i])
dfs2(i);
}
static
bool
Is_connected(
int
n)
{
for
(
int
i = 0; i < n; i++)
vis1[i] =
false
;
dfs1(1);
for
(
int
i = 0; i < n; i++)
vis2[i] =
false
;
dfs2(1);
for
(
int
i = 1; i <= n; i++)
{
if
(!vis1[i] && !vis2[i])
return
false
;
}
return
true
;
}
public
static
void
Main(String[] args)
{
int
n = 4;
for
(
int
i = 0; i < N; i++)
{
gr1[i] =
new
List<
int
>();
gr2[i] =
new
List<
int
>();
}
Add_edge(1, 2);
Add_edge(1, 3);
Add_edge(2, 3);
Add_edge(3, 4);
if
(Is_connected(n))
Console.WriteLine(
"Yes"
);
else
Console.WriteLine(
"No"
);
}
}