Pagini recente » Cod sursa (job #2975191) | Cod sursa (job #3177021) | Cod sursa (job #3142116) | Cod sursa (job #2925986) | Cod sursa (job #2923515)
#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){
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<=n;i++)
c[i]=1;
for(int i=1;i<=m;i++)
{
fin>>x>>y>>z;
y= Radacina(y);
z= Radacina(z);
if(x==1)
{
if(y!= z)
unite(y,z);
}
else
{
fout<<((y)==(z)?"DA\n":"NU\n");
}
}
}