Pagini recente » Cod sursa (job #3343425) | Cod sursa (job #2474679) | Cod sursa (job #2821524) | Cod sursa (job #3339439) | Cod sursa (job #3337583)
///Varianta 0
/**
#include <iostream>
using namespace std;
const int NMAX = 500;
int N, CC[NMAX + 1];
void Union(int cx, int cy)
{
for(int i = 1; i <= N; i++)
if(CC[i] == cy)
CC[i] = cx;
}
int main()
{
int M, op, x, y, cx, cy;
cin >> N >> M;
for(int i = 1; i <= N; i++)
CC[i] = i;
//
while(M--)
{
cin >> op >> x >> y;
cx = CC[x];
cy = CC[y];
if(op == 1)
{
if(cx != cy)
Union(cx, cy);
}
else
{
if(cx == cy)
cout << "DA\n";
else
cout << "NU\n";
}
}
return 0;
}
///Varianta 1
#include <iostream>
using namespace std;
const int NMAX = 500;
int T[NMAX + 1];
int Find(int i)
{
if(T[i] == 0)
return i;
return T[i] = Find(T[i]);
}
inline void Union(int cx, int cy)
{
T[cy] = cx;
}
int main()
{
int N, M, op, x, y, cx, cy;
cin >> N >> M;
while(M--)
{
cin >> op >> x >> y;
cx = Find(x);
cy = Find(y);
if(op == 1)
{
if(cx != cy)
Union(cx, cy);
}
else
{
if(cx == cy)
cout << "DA\n";
else
cout << "NU\n";
}
}
return 0;
}
*/
#include <fstream>
#include <iostream>
using namespace std;
const int NMAX = 100001;
int N, M,
T[NMAX],
Sz[NMAX];
ifstream f("disjoint.in");
ofstream g("disjoint.out");
int Find(int i)
{
if(T[i] == 0)
return i;
return T[i] = Find(T[i]);
}
inline void Union(int rx, int ry)
{
if(Sz[rx] < Sz[ry])
{
T[rx] = ry;
Sz[ry] += Sz[rx];
}
else
{
T[ry] = rx;
Sz[rx] += Sz[ry];
}
}
int main()
{
int cod, x, y, rx, ry;
f >> N >> M;
for(int i = 1; i <= N; i++)
Sz[i] = 1;
while(M--)
{
f >> cod >> x >> y;
rx = Find(x);
ry = Find(y);
if(cod == 1)
{
Union(rx, ry);
}
else
{
if(rx == ry)
cout << "DA\n";
else
cout << "NU\n";
}
}
f.close();
g.close();
return 0;
}