Pagini recente » Cod sursa (job #2498554) | Cod sursa (job #858223) | Cod sursa (job #2712880) | Cod sursa (job #2859761) | Cod sursa (job #542353)
Cod sursa(job #542353)
#include<cstdio>
#include<vector>
using namespace std;
vector<int> V[100010];
void read(),solve();
int n,m,q,dad[100010],DAD[100010],calc(int),a,b,i,t,x,y,ok;
int main()
{
read();
solve();
return 0;
}
void read()
{
freopen("gossips.in","r",stdin);
freopen("gossips.out","w",stdout);
scanf("%d%d%d",&n,&m,&q);
}
void solve()
{
for(;m;m--)
{
scanf("%d%d",&a,&b);
dad[b]=a;
}
for(i=1;i<=n;i++)
if(!dad[i])dad[i]=i;
for(i=1;i<=n;i++)
{
if(dad[i]==i)DAD[i]=i;
else DAD[i]=calc(dad[i]);
}
for(;q;q--)
{
scanf("%d%d%d",&t,&x,&y);
if(t==2)
{
V[DAD[x]].push_back(y);
for(;y!=dad[y];)
{
y=dad[y];
V[DAD[x]].push_back(y);
}
continue;
}
ok=0;
for(vector<int>::iterator it=V[DAD[x]].begin();it!=V[DAD[x]].end();it++)
if(*it==y){ok=1;break;}
if(ok)printf("YES\n");else printf("NO\n");
}
}
int calc(int X)
{
if(X==dad[X])return X;
else
{
X=dad[X];
return calc(X);
}
}