Cod sursa(job #2359021)

Utilizator CraciunAlexCraciun Alexandru CraciunAlex Data 28 februarie 2019 16:01:18
Problema Paduri de multimi disjuncte Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.52 kb
#include <fstream>

using namespace std;

const int N = 100001;

//struct muchii {int n1; int n2; int cost;}v[5001];

int t[N];

int rad (int x)
{
    if (t[x]==0)
        return x;
    t[x]=rad(t[x]);
    return t[x];
}

void reun (int x, int y)
{
    int rx=rad(x);
    int ry=rad(y);
    if (rx!=ry)
        t[ry]=rx;
}

bool verif (int x, int y)
{
    return (rad(x)==rad(y));
}

int main()
{
    ifstream in ("disjoint.in");
    ofstream out ("disjoint.out");
    //int n, m, k, minim=0, ales[101]={0}, aux=0, poz, c=0, x;
    int n, m, tip, x ,y;
    in>>n>>m;
    /*
    for (int i=1; i<=m; i++)
    {
      in>>v[i].n1>>v[i].n2>>v[i].cost;
      if(v[i].cost>minim)
        minim=v[i].cost;
    }
    in>>k;
    for (int i=1; i<=k; i++)
    {
        in>>x;
        ales[v[x].n1]=ales[v[x].n2]=1;
        c=c+v[x].cost;
    }
    for (int i=1; i<n; i++)
    {
      aux=minim+1;
      for (int j=1; j<=m; j++)
      {
        if (ales[v[j].n1]+ales[v[j].n2]==1 && aux>v[j].cost)
        {
          aux=v[j].cost;
          poz=j;
        }
      }
      c=c+v[poz].cost;
      if (ales[v[poz].n1]==0) ales[v[poz].n1]=1;
      else ales[v[poz].n2]=1;
    }
    out<<c;
    */
    for (int i = 0; i < m; i++)
    {
        in >> tip >> x >> y;
        if (tip == 1)
        {
            reun(x, y);
        }
        else
        {
            if (verif(x, y))
            {
                out << "DA";
            }
            else
            {
                out << "NU";
            }
            out << "\n";
        }
    }
    return 0;
}