Pagini recente » Cod sursa (job #683860) | Cod sursa (job #87244) | Cod sursa (job #950233) | Cod sursa (job #2162666) | Cod sursa (job #542318)
Cod sursa(job #542318)
#include <cstdio>
#include <bitset>
#include <assert.h>
#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;
}
assert (N <= maxN/10);
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;
else break;
Y = t[Y];
}
}
else {
if (mybit[c[x]][y] == 1)
printf ("YES\n");
else printf ("NO\n");
}
}
return 0;
}