Pagini recente » Cod sursa (job #2916917) | Cod sursa (job #3229620) | Cod sursa (job #1835466) | Cod sursa (job #35784) | Cod sursa (job #2923514)
#include<fstream>
#include <iostream>
#include<vector>
using namespace std;
ofstream fout("disjoint.out");
class inparser{
vector<char>str;
int ptr;
ifstream fin;
char getchar()
{
if(ptr==int(str.size()))
{
fin.read(str.data(),str.size());
ptr=0;
}
return str[ptr++];
}
template<class T>
T getint()
{
char chr=getchar();
if(!isdigit(chr)&&chr!='-')
chr=getchar();
int sgn=+1;
if(chr=='-')
{
sgn=-1;
chr=getchar();
}
T numar=0;
while(isdigit(chr))
{
numar=numar*10+chr-'0';
chr=getchar();
}
return numar*sgn;
}
public:
inparser(char *name): str(1e5),ptr(int(str.size())),fin(name){}
~inparser(){fin.close();}
template<class T>
friend inparser & operator >> (inparser & in,T &numar)
{
numar=in.template getint<T>();
return in;
}
};
inparser fin("disjoint.in");
int T[1000002],c[100001];
int Radacina(int k){
if(T[k] == 0)
return k;
else
{
return T[k] = Radacina(T[k]);;
}
}
void unite (int x, int y){
x = Radacina(x);
y = Radacina(y);
if (c[x] > c[y]){
swap(x, y);
}
T[y] = x;
c[x] += c[y];
}
int main() {
int n,m,x,y,z;
fin>>n>>m;
for(int i=1;i<=m;i++)
{
fin>>x>>y>>z;
if(x==1)
{
if(Radacina(y)!= Radacina(z))
unite(y,z);
}
else
{
fout<<(Radacina(y)==Radacina(z)?"DA\n":"NU\n");
}
}
}