using
System;
using
System.Collections.Generic;
class
GFG
{
static
void
FindUnion(List<(
string
,
int
,
int
)> G1, List<(
string
,
int
,
int
)> G2)
{
Dictionary<
string
, (
int
,
int
)> added =
new
Dictionary<
string
, (
int
,
int
)>();
List<(
string
,
int
,
int
)> G =
new
List<(
string
,
int
,
int
)>();
foreach
((
string
a,
int
b,
int
c)
in
G1)
{
G.Add((a, b, c));
added[a] = (b, c);
}
foreach
((
string
a,
int
b,
int
c)
in
G2)
{
(
int
x,
int
y) = (b, c);
(
int
y2,
int
x2) = (c, b);
if
(added.ContainsKey(a) && (added[a] == (x, y) || added[a] == (y2, x2)))
continue
;
G.Add((a, b, c));
}
Console.WriteLine(
"G1 union G2 is"
);
foreach
((
string
a,
int
b,
int
c)
in
G)
{
Console.WriteLine(a +
" "
+ b +
" "
+ c);
}
}
static
void
FindIntersection(List<(
string
,
int
,
int
)> G1, List<(
string
,
int
,
int
)> G2)
{
Dictionary<
string
, (
int
,
int
)> added =
new
Dictionary<
string
, (
int
,
int
)>();
List<(
string
,
int
,
int
)> G =
new
List<(
string
,
int
,
int
)>();
foreach
((
string
a,
int
b,
int
c)
in
G1)
{
added[a] = (b, c);
}
foreach
((
string
a,
int
b,
int
c)
in
G2)
{
(
int
x,
int
y) = (b, c);
(
int
y2,
int
x2) = (c, b);
if
(added.ContainsKey(a) && (added[a] == (x, y) || added[a] == (y2, x2)))
G.Add((a, b, c));
}
Console.WriteLine(
"G1 intersection G2 is"
);
foreach
((
string
a,
int
b,
int
c)
in
G)
{
Console.WriteLine(a +
" "
+ b +
" "
+ c);
}
}
static
void
Main(
string
[] args)
{
List<(
string
,
int
,
int
)> G1 =
new
List<(
string
,
int
,
int
)>
{
(
"e1"
, 1, 2),
(
"e2"
, 1, 3),
(
"e3"
, 3, 4),
(
"e4"
, 2, 4)
};
List<(
string
,
int
,
int
)> G2 =
new
List<(
string
,
int
,
int
)>
{
(
"e4"
, 2, 4),
(
"e5"
, 2, 5),
(
"e6"
, 4, 5)
};
FindUnion(G1, G2);
FindIntersection(G1, G2);
}
}