Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <vector>
- using namespace std;
- struct DSU{
- int cnt;
- vector<int> parent;
- vector<vector<int>> component;
- explicit DSU(int n){
- parent.resize(n);
- component.resize(n);
- for (int i = 0; i < n; i++){
- parent[i] = i;
- component[i].emplace_back(i);
- }
- cnt = n;
- }
- int getParent(int v){
- if (parent[v] == v)
- return v;
- return parent[v] = getParent(parent[v]);
- }
- int unionSets(int v, int u){
- v = getParent(v);
- u = getParent(u);
- if (u != v){
- parent[u] = v;
- component[v].insert(component[v].end(), component[u].begin(), component[u].end());
- component[u].clear();
- cnt--;
- }
- }
- int getComponentsCnt() const{
- return cnt;
- }
- };
- class Graph {
- vector<vector<bool>> g;
- vector<int> color;
- vector<bool> used;
- DSU *dsu;
- public:
- Graph(vector<vector<bool>> &_g, vector<int> &_color, DSU *_dsu) {
- g = _g;
- color = _color;
- used.resize(g.size());
- dsu = _dsu;
- }
- int countEdge() {
- int cnt = 0;
- for (int i = 0; i < g.size(); i++) {
- for (int j = 0; j < g.size(); j++) {
- if (i == j)
- continue;
- if (color[i] != color[j] && !g[i][j]) {
- g[i][j] = true;
- g[j][i] = true;
- dsu->unionSets(i, j);
- cnt++;
- }
- }
- }
- return cnt;
- }
- };
- int main() {
- int queries;
- cin >> queries;
- for (int query = 0; query < queries; query++) {
- int n, m, p, k;
- cin >> n >> m >> p >> k;
- vector<vector<bool>> g(n, vector<bool>(n));
- vector<int> color(n);
- DSU dsu(n);
- for (int i = 0; i < n; i++)
- cin >> color[i];
- for (int i = 0; i < m; i++) {
- int fr, to;
- cin >> fr >> to;
- fr--;
- to--;
- g[fr][to] = true;
- g[to][fr] = true;
- dsu.unionSets(fr, to);
- }
- if (dsu.getComponentsCnt() - 1 > p){
- cout << "N\n";
- continue;
- }
- // проверить, можно ли соединить разные компоненты связности
- Graph graph(g, color, &dsu);
- if (graph.countEdge() >= p && dsu.getComponentsCnt() == 1) {
- cout << "Y\n";
- } else {
- cout << "N\n";
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement