tuki2501

1133F2.cpp

Jul 13th, 2020
1,257
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.61 KB | None | 0 0
  1. #include <bits/stdc++.h>
  2. using namespace std;
  3.  
  4. #define int long long
  5.  
  6. #define ii pair<int,int>
  7. #define fi first
  8. #define sc second
  9.  
  10. #define sqr(x) ((x)*(x))
  11. #define all(x) (x).begin(),(x).end()
  12.  
  13. #define rank qwertyui
  14.  
  15. const int N = 200005;
  16.  
  17. int root[N], rank[N];
  18.  
  19. int find(int i) {
  20.   if (i == root[i]) return i;
  21.   return root[i] = find(root[i]);
  22. }
  23.  
  24. int join(int u, int v) {
  25.   u = find(u); v = find(v);
  26.   if (u == v) return false;
  27.   if (rank[u] > rank[v]) swap(u, v);
  28.   if (rank[u] == rank[v]) rank[v]++;
  29.   root[u] = v;
  30.   return true;
  31. }
  32.  
  33. signed main() {
  34. #ifdef _DEBUG
  35.   freopen("in" , "r", stdin );
  36. #endif
  37.   ios::sync_with_stdio(0); cin.tie(0);
  38.   int n, m, d;
  39.   cin >> n >> m >> d;
  40.   for (int i = 1; i <= n; i++) {
  41.     root[i] = i;
  42.   }
  43.   set<int> s;
  44.   vector<ii> e;
  45.   for (int i = 1; i <= m; i++) {
  46.     int u, v;
  47.     cin >> u >> v;
  48.     if (u > v) swap(u, v);
  49.     if (u == 1) {
  50.       s.insert(v);
  51.       rank[v] = n;
  52.     }
  53.     else e.push_back(ii(u, v));
  54.   }
  55.   if (s.size() < d) {
  56.     cout << "NO" << '\n';
  57.     return 0;
  58.   }
  59.   vector<ii> r;
  60.   for (auto i : e) {
  61.     int u = find(i.fi), v = find(i.sc);
  62.     if (!(s.count(u) && s.count(v))) {
  63.       if (join(u, v)) r.push_back(ii(i.fi, i.sc));
  64.     }
  65.   }
  66.   int t = s.size() - d;
  67.   for (auto i : e) {
  68.     if (!t) break;
  69.     if (join(i.fi, i.sc)) {
  70.       r.push_back(ii(i.fi, i.sc));
  71.       t--;
  72.     }
  73.   }
  74.   if (t) {
  75.     cout << "NO" << '\n';
  76.     return 0;
  77.   }
  78.   for (auto i : s) {
  79.     if (join(1, i)) r.push_back(ii(1, i));
  80.   }
  81.   cout << "YES" << '\n';
  82.   for (auto i : r) {
  83.     cout << i.fi << ' ' << i.sc << '\n';
  84.   }
  85. }
Advertisement
Add Comment
Please, Sign In to add comment