제출 #1174267

#제출 시각아이디문제언어결과실행 시간메모리
1174267ThommyDBSenior Postmen (BOI14_postmen)C++20
55 / 100
755 ms166360 KiB
#include<bits/stdc++.h> using namespace std; int n, m; vector<vector<int>> adj, ans; map<pair<int, int>, bool> streetCovered; vector<bool> visited; void showCurrAns(){ cout << "Curr ans: \n"; for(auto u : ans.back()){ cout << u+1 << " "; } cout << "\n"; } void showVisited(){ cout << "Visited: \n"; for(auto u : visited){ cout << u << " "; } cout << "\n"; } void showStreetCovered(){ cout << "Streets covered: \n"; for(auto u : streetCovered){ cout << u.first.first+1 << " und " << u.first.second+1 << " = " << u.second << "\n"; } } void dfs(int x){ if(visited[x]){ visited[x]=false; vector<int> currAns = {x}; //showCurrAns(); while(!ans.back().empty() && ans.back().back()!=x){ currAns.push_back(ans.back().back()); visited[ans.back().back()]=false; ans.back().pop_back(); } if(!ans.back().empty()) ans.back().pop_back(); if(ans.back().empty()){ swap(currAns, ans.back()); return; } else{ ans.push_back(currAns); swap(ans.back(), ans[ans.size()-2]); } //showCurrAns(); //showVisited(); } visited[x]=true; ans.back().push_back(x); while(!adj[x].empty() && streetCovered[{x, adj[x].back()}]) adj[x].pop_back(); int u = adj[x].back(); streetCovered[{u, x}]=true; streetCovered[{x, u}]=true; dfs(u); } signed main(){ cin >> n >> m; adj.resize(n); visited.resize(n, false); for(int i = 0; i < m; i++){ int u, v; cin >> u >> v; u--; v--; adj[u].push_back(v); adj[v].push_back(u); } int j = 0; while(j<n){ while(!adj[j].empty() && streetCovered[{j, adj[j].back()}]) adj[j].pop_back(); if(adj[j].empty()){ j++; continue; } ans.push_back({}); dfs(j); if(adj[j].empty()) j++; } for(int i = 0; i < ans.size(); i++){ for(int j = 0; j < ans[i].size(); j++){ cout << ans[i][j]+1 << " "; } cout << "\n"; } }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...