제출 #1160393

#제출 시각아이디문제언어결과실행 시간메모리
1160393Ludissey어르신 집배원 (BOI14_postmen)C++20
100 / 100
258 ms41392 KiB
#include <bits/stdc++.h> #define sz(a) (int)a.size() #define all(a) a.begin(), a.end() #define rall(a) a.rbegin(), a.rend() using namespace std; vector<vector<pair<int,int>>> neigh; vector<int> circuit; vector<int> start; vector<bool> edvisit; signed main() { ios_base::sync_with_stdio(false); cin.tie(nullptr); int n,m; cin >> n >> m; neigh.resize(n); start.resize(n,0); edvisit.resize(m); for (int i = 0; i < m; i++) { int u,v; cin >> u >> v; u--; v--; neigh[u].push_back({v,i}); neigh[v].push_back({u,i}); } stack<int> path; int u=0; while(true){ bool b=false; for (int i=start[u]; i<sz(neigh[u]); i++) { pair<int,int> v=neigh[u][i]; if(edvisit[v.second]){ start[u]++; continue; } start[u]++; b=true; edvisit[v.second]=true; path.push(u); u=v.first; break; } if(b) { continue; } circuit.push_back(u); if(path.empty()) break; u=path.top(); path.pop(); } vector<vector<int>> out; vector<int> visited(n); stack<int> q; for (int i = 0; i < sz(circuit); i++) { if(visited[circuit[i]]){ out.push_back({circuit[i]}); while(!q.empty()&&q.top()!=circuit[i]){ out.back().push_back(q.top()); visited[q.top()]=false; q.pop(); } out.back().push_back(circuit[i]); }else{ q.push(circuit[i]); visited[circuit[i]]=true; } } for (int i = 0; i < sz(out); i++) { for (int j = 0; j < sz(out[i])-1; j++) cout << out[i][j]+1 << " "; cout << "\n"; } return 0; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...