Pagini recente » Cod sursa (job #28756) | Cod sursa (job #39435) | Cod sursa (job #3178413) | Cod sursa (job #800900) | Cod sursa (job #2549406)
#include <bits/stdc++.h>
#define NMAX 100005
using namespace std;
ifstream f("disjoint.in");
ofstream g("disjoint.out");
int componente[NMAX],apartenentaLaComponente[NMAX],n,m,nrComponente;
//nr componente doar numara componentele care initial sunt diferite,
//la final sunt mai putine dar am folosit asa pt mai putine parcurgeri
int main()
{
f>>n>>m;
int quest,op,x,y,aux,i;
for(quest=1;quest<=m;quest++)
{
f>>op>>x>>y;
if(op==1) //adaugare
{
if(apartenentaLaComponente[x]==0 && apartenentaLaComponente[y]==0)//creeem comp conex cu 2 noduri: x si y
{
apartenentaLaComponente[x]=apartenentaLaComponente[y]=++nrComponente;
componente[nrComponente]=2;
}
else if(apartenentaLaComponente[x]==0)//adaugam x la comp conex din y
{
apartenentaLaComponente[x]=apartenentaLaComponente[y];
componente[apartenentaLaComponente[x]]++;
}
else if(apartenentaLaComponente[y]==0)//adaugam y la comp conex din x
{
apartenentaLaComponente[y]=apartenentaLaComponente[x];
componente[apartenentaLaComponente[x]]++;
}
else//combinam 2 componente conexe
{
if(apartenentaLaComponente[x]!=apartenentaLaComponente[y])//daca nu sunt deja in aceeasi componenta conexa
{
componente[apartenentaLaComponente[x]]+=componente[apartenentaLaComponente[y]];
aux=apartenentaLaComponente[y];
for(i=1;i<=n;i++)
{
if(apartenentaLaComponente[i]==aux) apartenentaLaComponente[i]=apartenentaLaComponente[x];
}
}
}
}
else
{
if(apartenentaLaComponente[x]==apartenentaLaComponente[y]) g<<"DA\n";
else g<<"NU\n";
}
}
return 0;
}