Nu aveti permisiuni pentru a descarca fisierul grader_test6.in
Cod sursa(job #2736412)
| Utilizator | Data | 3 aprilie 2021 14:15:33 | |
|---|---|---|---|
| Problema | Paduri de multimi disjuncte | Scor | 40 |
| Compilator | cpp-64 | Status | done |
| Runda | Arhiva educationala | Marime | 0.91 kb |
#include <iostream>
#include <fstream>
using namespace std;
int n,m,i,t[100005],c,a,b,t1,t2;
ifstream in("disjoint.in");
ofstream out("disjoint.out");
int tata(int x)
{
if (t[x]==x) return x;
else tata(t[x]);
}
void uniform(int a, int t1)
{
if (t[a]==t1) return;
else
{
t[a]=t1;
uniform(t[a],t1);
}
}
int main()
{
in>>n>>m;
for (i=1;i<=n;i++)
t[i]=i;
for (i=1;i<=m;i++)
{
in>>c;
if (c==1)
{
in>>a>>b;
t1=tata(a);
uniform(a,t1);
t2=tata(b);
uniform(b,t1);
if (t1!=t2) t[t2]=t1;
}
else
{
in>>a>>b;
t1=tata(a);
t2=tata(b);
uniform(a,t1);
uniform(b,t2);
if (t1==t2) out<<"DA"<<endl;
else out<<"NU"<<endl;
}
}
}
