using
System;
using
System.Collections.Generic;
using
System.Linq;
class
Program {
static
int
[] parent =
new
int
[100];
static
int
[] Size =
new
int
[100];
static
void
make_set(
int
v)
{
parent[v] = v;
Size[v] = 1;
}
static
int
find_set(
int
v)
{
if
(v == parent[v]) {
return
v;
}
return
parent[v] = find_set(parent[v]);
}
static
void
union_sets(
int
a,
int
b)
{
a = find_set(a);
b = find_set(b);
if
(a != b) {
if
(Size[a] < Size[b]) {
int
temp = a;
a = b;
b = temp;
}
parent[b] = a;
Size[a] += Size[b];
}
}
static
void
findMinVertex(
int
N, List<List<
int
> > edges)
{
for
(
int
i = 1; i <= N; i++) {
make_set(i);
}
for
(
int
i = 0; i < edges.Count(); i++) {
union_sets(edges[i][0], edges[i][1]);
}
Dictionary<
int
,
int
> minVal
=
new
Dictionary<
int
,
int
>();
for
(
int
i = 1; i <= N; i++) {
if
(!minVal.ContainsKey(find_set(i))) {
minVal.Add(find_set(i), i);
}
else
{
minVal[find_set(i)] = Math.Min(
(
int
)minVal.GetValueOrDefault(
(
int
)find_set(i), 0),
i);
}
}
for
(
int
i = 1; i <= N; i++) {
Console.Write(
"{0} "
, minVal.GetValueOrDefault(
(
int
)find_set(i), 0));
}
}
public
static
void
Main()
{
int
N = 6;
List<List<
int
> > edges =
new
List<List<
int
> >();
List<
int
> a1 =
new
List<
int
>();
a1.Add(1);
a1.Add(3);
edges.Add(a1);
List<
int
> a2 =
new
List<
int
>();
a2.Add(2);
a2.Add(4);
edges.Add(a2);
findMinVertex(N, edges);
}
}