Skip to content

Instantly share code, notes, and snippets.

@paramsingh
Created March 10, 2016 15:55
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save paramsingh/81d728295e6bd01860a0 to your computer and use it in GitHub Desktop.
Save paramsingh/81d728295e6bd01860a0 to your computer and use it in GitHub Desktop.
#include <bits/stdc++.h>
#define mp make_pair
using namespace std;
typedef pair<int, int> pii;
int done[1000100] = {0};
int visited[1000100] = {0};
int level[1000100] = {0};
vector<int> graph[1000100];
int main(void) {
int t;
scanf("%d", &t);
while (t--) {
int n, r, m;
scanf("%d %d %d", &n, &r, &m);
memset(done, 0, sizeof(done));
memset(visited, 0, sizeof(visited));
for (int i = 0; i <= n; i++) {
graph[i].clear();
}
for (int i = 0; i < r; i++) {
int u, v;
scanf("%d %d", &u, &v);
graph[u].push_back(v);
graph[v].push_back(u);
}
vector<pii> soldiers;
for (int i = 0; i < m; i++) {
int num, s;
scanf("%d %d", &num, &s);
soldiers.push_back(mp(num, s));
}
int flag = 1;
for (int k = 0; k < soldiers.size(); k++) {
int src = soldiers[k].first;
int st = soldiers[k].second;
memset(visited, 0, sizeof(visited));
memset(level, 0, sizeof(level));
queue<int> q;
q.push(src);
visited[src] = 1;
while (!q.empty()) {
int u = q.front();
q.pop();
if (level[u] > st)
break;
if (done[u] == 1) {
flag = 0;
break;
}
for (int j = 0; j < graph[u].size(); j++) {
int v = graph[u][j];
if (visited[v] == 0) {
q.push(v);
visited[v] = 1;
level[v] = level[u] + 1;
}
}
done[u] = 1;
}
if (flag == 0)
break;
}
for (int i = 1; i <= n; i++) {
if (done[i] == 0) {
flag = 0;
break;
}
}
if (flag == 0)
printf("No\n");
else
printf("Yes\n");
}
return 0;
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment