Cod sursa(job #1168260)
Utilizator | Pavel Stefan Cristian giminis96 | Data | 7 aprilie 2014 18:43:56 |
---|---|---|---|
Problema | Paduri de multimi disjuncte | Scor | 0 |
Compilator | cpp | Status | done |
Runda | Arhiva educationala | Marime | 1.27 kb |
#include <fstream>
using namespace std;
int n,m;
int *v;
inline void adauga(int x,int y)
{
int c;
int d;
if(x < y)
{
if(v[x] == 0)
{
v[x] = x;
c = x;
}
else
{
c = v[y];
d = v[x];
}
v[y] = v[x];
}
else
{
if(v[y] == 0)
{
v[y] = y;
c = y;
}
else
{
c = v[y];
d = v[x];
}
v[x] = v[y];
}
int i;
for(i = 1; i <= n; i++)
{
if(v[i] == c)
v[i] = d;
}
}
bool gaseste(int x,int y)
{
return (v[x] == v[y]);
}
inline void citeste()
{
ifstream in("disjoint.in");
ofstream out("disjoint.out");
in>>n>>m;
v = new int[n+1];
int i;
int a,b,c;
for(i = 0; i < m; i++)
{
in>>a>>b>>c;
if(a == 1)
{
adauga(b,c);
}
else
{
if(gaseste(b,c))
out<<"DA"<<'\n';
else
out<<"NU"<<'\n';
}
}
in.close();
out.close();
}
int main()
{
citeste();
return 0;
}