Cod sursa(job #3332959)

Utilizator Adrian_SAdrian Solcanu Adrian_S Data 10 ianuarie 2026 10:00:36
Problema Paduri de multimi disjuncte Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.89 kb
#include<fstream>
#include<cstdio>
#include<vector>
using namespace std;
ifstream fin("disjoint.in");
ofstream fout("disjoint.out");
int n,m,i,j,a,b,c,x,y,cod;
int par[100001],rnk[100001];
int caut(int x)
{
  if(par[x]==x)
    return x;
  else
  {
    par[x]=caut(par[x]);
    return par[x];
  }
}
int main()
{
  ios::sync_with_stdio(false);
  fin.tie(0);
  fin>>n>>m;
  for(i=1;i<=n;++i)
  {
    par[i]=i;
    rnk[i]=1;
  }
  for(i=1;i<=m;++i)
  {
      fin>>cod>>x>>y;
      if(cod==1)
      {
        int u=caut(x);
        int v=caut(y);
        if(rnk[u]==rnk[v])
          rnk[u]++;
        else if(rnk[u]<rnk[v])
          swap(u,v);
        par[v]=u;
      }
      else if(cod==2)
      {
        int u=caut(x);
        int v=caut(y);
        if(u==v)
          fout<<"DA"<<'\n';
        else
            fout<<"NU"<<'\n';
      }
  }
  return 0;
}