Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <bits/stdc++.h>
- using namespace std;
- #define SZ(x) ((int)(x).size())
- int main() {
- ios_base::sync_with_stdio(0), cin.tie(0);
- int N, M; cin >> N >> M;
- vector<set<int>> adj(N+1);
- for (int i = 0; i < M; ++i) {
- int u, v; cin >> u >> v;
- adj[u].emplace(v), adj[v].emplace(u);
- }
- vector<string> ops;
- deque<int> deq;
- for (int i = 2; i <= N; ++i) { if (SZ(adj[i]) <= 2) deq.emplace_back(i); }
- while (SZ(deq)) {
- int now = deq[0]; deq.pop_front();
- if (now == 1 or SZ(adj[now]) == 0) continue;
- if (SZ(adj[now]) == 1) {
- int v = now, u = *begin(adj[now]);
- ops.emplace_back("L"s + " "s + to_string(u) + " "s + to_string(v));
- adj[u].erase(v), adj[v].erase(u);
- if (SZ(adj[u]) == 2) deq.emplace_back(u);
- }
- else {
- int w = now, u = *begin(adj[now]), v = *next(begin(adj[now]));
- ops.emplace_back("I"s + " "s + to_string(u) + " "s + to_string(v) + " "s + to_string(w));
- adj[w].erase(u), adj[u].erase(w);
- adj[w].erase(v), adj[v].erase(w);
- if (adj[u].count(v)) {
- ops.emplace_back("D"s + " "s + to_string(u) + " "s + to_string(v));
- if (SZ(adj[u]) == 2) deq.emplace_back(u);
- if (SZ(adj[v]) == 2) deq.emplace_back(v);
- }
- else {
- adj[u].emplace(v), adj[v].emplace(u);
- }
- }
- }
- if (SZ(ops) == M) {
- cout << "Yes" << "\n";
- reverse(begin(ops), end(ops));
- for (const string &str : ops) cout << str << "\n";
- }
- else {
- cout << "No" << "\n";
- }
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement