Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <bits/stdc++.h>
- using namespace std;
- #define ll long long
- #define _test int _TEST; cin>>_TEST; while(_TEST--)
- #define ff first
- #define ss second
- #define pb push_back
- int main()
- {
- _test
- {
- int n, m, k;
- cin>>n>>m>>k;
- vector<int> x(k);
- vector<int> d(k);
- for(auto &e: x) cin>>e;
- for(auto &e: d) cin>>e;
- vector<vector<int>> graph(n);
- for(int i=0; i<m; i++)
- {
- int u, v;
- cin>>u>>v;
- u--, v--;
- graph[u].pb(v);
- graph[v].pb(u);
- }
- vector<int> vis(n);
- vector<int> vals(n);
- for(int i=0; i<k; i++)
- {
- vis[x[i]-1] = 1;
- vals[x[i]-1] = max(vals[x[i]-1], d[i]);
- }
- set<pair<int, int>> sp;
- for(int i=0; i<n; i++)
- sp.insert({vals[i], i});
- while(sp.size())
- {
- auto e = *sp.rbegin();
- sp.erase(--sp.end());
- int u = e.ss;
- if(e.ff < vals[u]) continue;
- if(e.ff <= 1) continue;
- for(auto v: graph[u])
- {
- if(!vis[v])
- vis[v] = 1;
- if(vals[v] < vals[u]-1)
- {
- vals[v] = vals[u]-1;
- sp.insert({vals[v], v});
- }
- }
- }
- if(*min_element(vis.begin(), vis.end()) == 1)
- cout<<"YES\n";
- else
- cout<<"NO\n";
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment