Cod sursa(job #1583257)

Utilizator Darius15Darius Pop Darius15 Data 28 ianuarie 2016 20:10:48
Problema Paduri de multimi disjuncte Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.7 kb
#include <fstream>

using namespace std;
ifstream f("disjoint.in");
ofstream g("disjoint.out");
int n,m,Rank[100001],p[100001],i,t,x,y,y1,y2;
void reunion(int x,int y)
{
  if (Rank[x]>Rank[y])
    p[y]=x;
  else {
  p[x]=y;
  if (Rank[x]==Rank[y])
    Rank[y]++;
  }
}
int findset(int x)
{
   while(p[x]!=x)
    x=p[x];
   return x;
}
int main()
{
    f>>n>>m;
    for (i=1;i<=n;i++)
      p[i]=i;
    for (i=1;i<=m;i++)
    {
      f>>t>>x>>y;
      if (t==1)
        y1=findset(x),y2=findset(y),reunion(y1,y2);
      else
      {
        y1=findset(x),
        y2=findset(y);
        if (y1==y2) g<<"DA"<<'\n';
        else g<<"NU"<<'\n';
      }
    }

    return 0;
}