fork(5) download
  1. #include<bits/stdc++.h>
  2. using namespace std;
  3. #define ll long
  4. int main()
  5. {
  6. int t;
  7. cin>>t;
  8. while(t--){
  9.  
  10. long long int n,x,y,i,depth=0,l=0,m,k,r,solo[n+9],f=0,level[n+9];
  11. scanf("%lld %lld %lld",&n,&r,&m);
  12. vector<vector<long long int> >adj(n+1);
  13. vector<long long int>::iterator it;
  14. for(i=0;i<r;i++)
  15. {
  16. scanf("%lld %lld",&x,&y);
  17. adj[x].push_back(y);
  18. adj[y].push_back(x);
  19. }
  20. for(i=1;i<=n;i++)
  21. solo[i]=-1;
  22.  
  23. for(i=0;i<m;i++)
  24. {
  25. cin>>x>>y;
  26. solo[x]=y;
  27. }
  28.  
  29. bool visited[n];
  30. queue<long long int>mystack;
  31. long long int s;
  32. for(i=1;i<=n;i++)
  33. {
  34. visited[i]=false;
  35. level[i]=0;
  36. }
  37.  
  38. for(i=1;i<=n;i++)
  39. {
  40.  
  41. if(solo[i]!=-1 && visited[i]==false){
  42.  
  43. s=i;
  44.  
  45. mystack.push(s);
  46. visited[s]=true;
  47. level[s]=0;
  48. while(!mystack.empty())
  49. {
  50.  
  51.  
  52. s=mystack.front();
  53. mystack.pop();
  54. if(level[s]>=solo[i])
  55. {
  56. break;}
  57.  
  58. for(it=adj[s].begin();it<adj[s].end();it++)
  59. {
  60. if(visited[*it]==false)
  61. {
  62. level[*it]=level[s] +1;
  63. visited[*it]=true;
  64. mystack.push(*it);
  65.  
  66.  
  67. }
  68. else
  69. {
  70. f=1;}
  71. }
  72.  
  73.  
  74. }
  75.  
  76.  
  77. }
  78.  
  79.  
  80. }
  81. if(f==1)
  82. {
  83. cout<<"No\n";
  84. }
  85. else cout<<"Yes\n";
  86. }
  87. }
  88.  
Success #stdin #stdout 0s 4576KB
stdin
2

3 2 2

1 2

2 3

1 2

2 0

4 5 2

1 4

1 2

1 3

4 2

3 4

2 1

3 0
stdout
No
Yes