Pagini recente » Cod sursa (job #1559263) | Cod sursa (job #2870960) | Cod sursa (job #2068343) | Cod sursa (job #135912) | Cod sursa (job #542314)
Cod sursa(job #542314)
#include <cstdio>
#include <bitset>
#define maxN 100005
using namespace std;
int N, M, Q, c[maxN], t[maxN], nrcomp;
bitset <maxN/10> mybit[maxN/10];
void DF (int node)
{
if (c[node]) return;
if (!t[node]) {
if (c[node] == 0)
c[node] = ++nrcomp;
return ;
}
else {
DF (t[node]);
c[node] = c[t[node]];
}
}
int main ()
{
freopen ("gossips.in", "r", stdin);
freopen ("gossips.out", "w", stdout);
scanf ("%d %d %d\n", &N, &M, &Q);
int x, y, Y, i, op;
while (M--)
{
scanf ("%d %d\n", &x, &y);
t[y] = x;
}
for (i = 1; i <= N; i++)
if (!c[i])
DF (i);
// for (i = 1; i <= N; i++)
// printf ("%d ", c[i]);
while (Q--)
{
scanf ("%d %d %d\n", &op, &x, &y);
if (op == 2) //insert
{
Y = y;
while (Y != 0) {
if (mybit[c[x]][Y] == 0)
mybit[c[x]][Y] = 1;
Y = t[Y];
}
}
else {
if (mybit[c[x]][y] == 1 || c[x] == c[y])
printf ("YES\n");
else printf ("NO\n");
}
}
return 0;
}