Pagini recente » Monitorul de evaluare | Cod sursa (job #656420) | Cod sursa (job #1421006) | Cod sursa (job #1222036) | Cod sursa (job #1819300)
#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)
{
if (start == _find)
return 1;
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");
}
in.close();
out.close();
return 0;
}