Cod sursa(job #1819292)

Utilizator SlevySlevoaca Stefan-Gabriel Slevy Data 30 noiembrie 2016 14:41:33
Problema Paduri de multimi disjuncte Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.1 kb
#include <iostream>
#include <fstream>
#include <vector>
#include <bitset>
#include <queue>
#define NMAX 100001

using namespace std;

ifstream in("disjoint.in");
ofstream out("disjoint.out");
vector <int> G[NMAX];
bitset <NMAX> mark;
queue <int> q;
int n, m;

int bfs(int start, int _find)
{
    mark.reset();
    mark.set(start);
    q.push(start);
    int node, ok = 0;
    while (!q.empty() && !ok)
    {
        node = q.front();
        for (unsigned int i = 0; i < G[node].size(); i++)
            if (!mark.test(G[node][i]))
            {
                q.push(G[node][i]);
                mark.set(G[node][i]);
                if (G[node][i] == _find)
                    ok = 1;
            }
        q.pop();
    }
    return ok;
}

int main()
{
    in >> n >> m;
    int x, y, op;
    for (int i = 1; i <= m; i++)
    {
        in >> op >> x >> y;
        if (op == 1)
        {
            G[x].push_back(y);
            G[y].push_back(x);
        }
        else
            out << ((bfs(x, y)) ? "DA\n" : "NU\n");
    }
    out.close();
    return 0;
}