제출 #530871

#제출 시각아이디문제언어결과실행 시간메모리
530871hohohaha어르신 집배원 (BOI14_postmen)C++14
55 / 100
564 ms104700 KiB
#include<bits/stdc++.h> using namespace std; #define fori(i, a, b) for(int i = (int) (a); i <= (int) (b); i++) #define ford(i, a, b) for(int i = (int) (b); i >= (int) (a); i--) #define ii pair<int, int> #define fi first #define se second #define vi vector<int> #define eb emplace_back #define sp ' ' #define endl '\n' #define int long long const int maxn = 5e5 + 5; int n, m; multiset<int> g[maxn]; vector<int> ans; void dfs(int); vector<vi> decompose(); bool vs[maxn]; void dfs(int u) { while(g[u].size()) { int v = *begin(g[u]); g[u].erase(g[u].find(v)); g[v].erase(g[v].find(u)); dfs(v); } ans.eb(u); // cout << u << endl; } vector<vi> decompose() { stack<int> cur; vector<vi> re; for(int u: ans) { if(!vs[u]) { cur.push(u); vs[u] = 1; } else { vi cyc; while(vs[u]) { cyc.eb(cur.top()); vs[cur.top()] = 0; cur.pop(); } re.eb(cyc); cur.push(u); vs[u] = 1; } } return re; } signed main() { ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0); cin >> n >> m; fori(i, 1, m) { int u, v; cin >> u >> v; g[u].insert(v); g[v].insert(u); } dfs(1); // since the thing is connected auto t = decompose(); for(auto cyc: t) { for(int u: cyc) { cout << u << sp; } cout << endl; } }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...