Cod sursa(job #2960557)

Utilizator Laurentiu_BTarabic Laurentiu Gabriel Laurentiu_B Data 4 ianuarie 2023 17:35:18
Problema Paduri de multimi disjuncte Scor 40
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.93 kb
#include<iostream>
#include<fstream>
#include<vector>
using namespace std;

struct dsu{
vector<int> sizes,parent;
 void init(int n)
 {
   parent.resize(n+2);
   sizes.resize(n+2,1);
   for(int i=1;i<=n;i++)
        parent[i]=i;
 }
 int master(int u)
 {
  if(parent[u]==u)
        return u;
  return parent[u]=master(parent[u]);
 }
 void unite(int u,int v)
 {
   u=master(u);
   v=master(v);
   if(u==v)
        return;
   if(sizes[u]<sizes[v])
    swap(u,v);
   parent[v]=u;
   sizes[u]+=sizes[v];
 }
};

int main()
{
  ifstream f("disjoint.in");
  ofstream g("disjoint.out");
  dsu DSU;
  int n,q;
  f>>n>>q;
  DSU.init(n);
  for(int i=1;i<=q;i++)
  {
      int x,y,z;
      f>>x>>y>>z;
      if(x==1)
      {
          DSU.unite(y,z);
      }
      if(x==2)
      {
         if(DSU.master(y)==DSU.master(z))
            g<<"DA"<<endl;
            else
                g<<"NU"<<endl;
      }
  }
}