Advertisement
SorahISA

A. Anon Tokyo

Sep 25th, 2024
49
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.74 KB | Source Code | 0 0
  1. #include <bits/stdc++.h>
  2. using namespace std;
  3.  
  4. #define SZ(x) ((int)(x).size())
  5.  
  6. int main() {
  7.     ios_base::sync_with_stdio(0), cin.tie(0);
  8.    
  9.     int N, M; cin >> N >> M;
  10.    
  11.     vector<set<int>> adj(N+1);
  12.     for (int i = 0; i < M; ++i) {
  13.         int u, v; cin >> u >> v;
  14.         adj[u].emplace(v), adj[v].emplace(u);
  15.     }
  16.    
  17.     vector<string> ops;
  18.     deque<int> deq;
  19.     for (int i = 2; i <= N; ++i) { if (SZ(adj[i]) <= 2) deq.emplace_back(i); }
  20.     while (SZ(deq)) {
  21.         int now = deq[0]; deq.pop_front();
  22.         if (now == 1 or SZ(adj[now]) == 0) continue;
  23.        
  24.         if (SZ(adj[now]) == 1) {
  25.             int v = now, u = *begin(adj[now]);
  26.             ops.emplace_back("L"s + " "s + to_string(u) + " "s + to_string(v));
  27.             adj[u].erase(v), adj[v].erase(u);
  28.             if (SZ(adj[u]) == 2) deq.emplace_back(u);
  29.         }
  30.         else {
  31.             int w = now, u = *begin(adj[now]), v = *next(begin(adj[now]));
  32.             ops.emplace_back("I"s + " "s + to_string(u) + " "s + to_string(v) + " "s + to_string(w));
  33.             adj[w].erase(u), adj[u].erase(w);
  34.             adj[w].erase(v), adj[v].erase(w);
  35.             if (adj[u].count(v)) {
  36.                 ops.emplace_back("D"s + " "s + to_string(u) + " "s + to_string(v));
  37.                 if (SZ(adj[u]) == 2) deq.emplace_back(u);
  38.                 if (SZ(adj[v]) == 2) deq.emplace_back(v);
  39.             }
  40.             else {
  41.                 adj[u].emplace(v), adj[v].emplace(u);
  42.             }
  43.         }
  44.     }
  45.    
  46.     if (SZ(ops) == M) {
  47.         cout << "Yes" << "\n";
  48.         reverse(begin(ops), end(ops));
  49.         for (const string &str : ops) cout << str << "\n";
  50.     }
  51.     else {
  52.         cout << "No" << "\n";
  53.     }
  54.    
  55.     return 0;
  56. }
  57.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement