Pagini recente » Cod sursa (job #733156) | Cod sursa (job #1896778) | Cod sursa (job #449493) | Cod sursa (job #2976854) | Cod sursa (job #2315606)
#include <iostream>
#include <fstream>
using namespace std;
ifstream fin("disjoint.in");
ofstream fout("disjoint.out");
class QuickUnionUF
{
private:
int id[100005];
int sz[100005];
int root(int i)
{
while(i != id[i])
{
i = id[i];
id[i] = id[id[i]];
}
return i;
}
public:
QuickUnionUF(int N)
{
for(int i=0;i<N;++i)
{
id[i]=i;
sz[i]=1;
}
}
bool connected(int p, int q)
{
return root(p)==root(q);
}
void unite(int p, int q)
{
int i = root(p);
int j = root(q);
//id[i] = j;
if (i == j) return;
if (sz[i] < sz[j])
{
id[i] = j;
sz[j] += sz[i];
}
else
{
id[j] = i;
sz[i] += sz[j];
}
}
};
int a,b,c,N,M,i;
int main()
{
fin>>N>>M;
QuickUnionUF sir=QuickUnionUF(N);
cout<<"FU";
//sir.QuickUnionUF(N);
for(i=0;i<M;++i)
{
fin>>c>>a>>b;
if(c==1){
sir.unite(a,b);
}
else{
if(sir.connected(a,b))fout<<"DA"<<'\n';
else fout<<"NU"<<'\n';
}
}
return 0;
}