#include #pragma comment(linker, "/STACK:102400000,102400000") int uu,tot,i,j,k,l,gt,s,m,n,test,x,y,b; int tt[4000005],last[4000005],to[4000005],next[4000005],vis[4000005]; inline void add(int o,int p) { next[++tot]=last[o]; last[o]=tot; to[tot]=p; } inline void dfs(int o) { if (vis[o]==gt) { b=1; return ; } vis[o]=gt; for (int i=last[o];i;i=next[i]) { if (b) return ; if (!tt[i]) { tt[i]=1; if (i<=uu) { tt[i^1]=1; dfs(to[i]); tt[i^1]=0; } else dfs(to[i]); tt[i]=0; } } vis[o]=1; } int main() { scanf("%d",&test); gt=1; while (test--) { b=0; gt++; tot=1; scanf("%d%d%d",&n,&m,&l); for (i=1;i<=m;i++) { scanf("%d%d",&x,&y); add(x,y); add(y,x); } uu=tot; for (i=1;i<=l;i++) { scanf("%d%d",&x,&y); add(x,y); //add(y,x); } for (i=1;i<=n;i++) if (!vis[i]) dfs(i); if (b) printf("YES\n"); else printf("NO\n"); for (i=1;i<=n;i++) vis[i]=last[i]=0; } }