using
System;
using
System.Collections.Generic;
using
System.Linq;
public
class
Gfg
{
static
int
numCnt = 1;
static
void
dfs(
int
V,
ref
int
cnt, List<
int
> vis, List<List<
int
>> adj, List<
int
> wC)
{
vis[V] = 1;
wC[V] = numCnt;
cnt++;
foreach
(
var
U
in
adj[V])
{
if
(vis[U] == 0)
{
dfs(U,
ref
cnt, vis, adj, wC);
}
}
}
static
void
isPossible(
int
N,
int
[,] edg,
int
M)
{
var
adj =
new
List<List<
int
>>(N + 1);
for
(
int
i = 0; i <= N; i++)
{
adj.Add(
new
List<
int
>());
}
for
(
int
i = 0; i < M; i++)
{
adj[edg[i, 0]].Add(edg[i, 1]);
adj[edg[i, 1]].Add(edg[i, 0]);
}
var
vis =
new
List<
int
>(
new
int
[N + 1]);
int
cnt = 0;
var
components =
new
List<
int
>();
var
wC =
new
List<
int
>(
new
int
[N + 1]);
for
(
int
i = 1; i <= N; i++)
{
if
(vis[i] == 0)
{
dfs(i,
ref
cnt, vis, adj, wC);
components.Add(cnt);
cnt = 0;
numCnt++;
}
}
var
edgComponent =
new
List<
int
>(
new
int
[components.Count]);
for
(
int
i = 0; i < M; i++)
{
edgComponent[wC[edg[i, 0]] - 1]++;
}
if
(Enumerable.SequenceEqual(edgComponent, components))
Console.WriteLine(
"Yes"
);
else
Console.WriteLine(
"No"
);
numCnt = 1;
}
public
static
void
Main()
{
int
N = 4, M = 3;
int
[,] edg = { { 1, 2 }, { 2, 3 }, { 3, 1 } };
isPossible(N, edg, M);
int
N1 = 5, M1 = 5;
int
[,] edg1 = {
{ 1, 2 }, { 2, 3 }, { 3, 4 }, { 3, 5 }, { 1, 5 }
};
isPossible(N1, edg1, M1);
}
}