Cod sursa(job #2425709)

Utilizator andreim98Andrei Manolache andreim98 Data 24 mai 2019 23:53:47
Problema Paduri de multimi disjuncte Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.5 kb
#include <iostream>
#include<fstream>
#include<vector>
#include<queue>
using namespace std;

int n,m,start;

const int inf = 10000000;
int viz[100001];
vector<int>d;

vector<int>L[100001];
vector<int>v;
vector<int>t;
vector<int>grad;
ifstream fin("royfloyd.in");
ofstream fout("royfloyd.out");

void init()
{
    int i;
    for(i=1;i<=n;i++)
        t[i]=i;
}

int find_(int x)
{
    if(x != t[x])
        t[x] = find_(t[x]);
    return t[x];
}

void union_(int x,int y)
{
    int r1,r2;
    r1=find_(x);
    r2=find_(y);

    if(grad[r1] > grad[r2])
        t[r2]=r1;
    else if(grad[r1] < grad[r2])
        t[r1]=r2;
    else
    {
        t[r1]=r2;
        grad[r2]++;
    }
}


void citire()
{
 fin>>n>>m;
 int i,j;
 grad.resize(n+1,0);
 t.resize(n+1,0);
 init();
 for(i=1;i<=m;i++)
 {
     int x,y,tip;
     fin>>tip>>x>>y;

     if(tip == 1)
        union_(x,y);
     else
     {
         if(find_(x) == find_(y))
            fout<<"DA\n";
        else fout<<"NU\n";

     }
 }
}

void bf(int start)
{
    int i;
    queue<pair<int,int> >Q;
    Q.push({0,start});
    d[start]=0;
    viz[start]=1;
    while(!Q.empty())
    {
        int x=Q.front().second;
        int c=Q.front().first;
        Q.pop();
        for(auto p:L[x])
            if(!viz[p])
        {
            d[p]=d[x]+1;
            Q.push({d[p],p});
            viz[p]=1;
        }
    }
}

int main()
{
    int nr_c=0;

    citire();
    return 0;
}