Submission #465899

#TimeUsernameProblemLanguageResultExecution timeMemory
465899prvocisloSenior Postmen (BOI14_postmen)C++17
55 / 100
513 ms85840 KiB
#include <iostream> #include <vector> #include <list> #include <algorithm> typedef long long ll; using namespace std; const int maxn = 5e5 + 5; struct edge { int u; list<edge>::iterator it; }; list<edge> g[maxn]; vector<int> e; void dfs(int u) { // Algortimus na hladanie Euler tour v grafe. // Funguje, lebo zastavit sa mozeme jedine v tom vrchole kde sme aj zacali, // kazdu hranu navstivime prave raz, lebo kedze je graf suvisly tak existuje nejaka cesta // zo zaciatocneho vrcholu do tejto hrany. A potom ako ju navstivime ju zmazeme, // takze uz ju nikdy viac nenavstivime. while (!g[u].empty()) { int v = g[u].begin()->u; g[v].erase(g[u].begin()->it); g[u].erase(g[u].begin()); dfs(v); } e.push_back(u); } int main() { ios::sync_with_stdio(false); cin.tie(0); int n, m; cin >> n >> m; for (int i = 0, a, b; i < m; i++) { cin >> a >> b; g[--a].push_front({ --b, g[b].begin() }); g[b].push_front({ a, g[a].begin() }); g[a].front().it = g[b].begin(); g[b].front().it = g[a].begin(); } dfs(0); vector<int> f(n), stk; //for (int i = 0; i < e.size(); i++) cout << e[i] + 1 << " "; //cout << "\n"; for (int i = 0; i < e.size(); i++) { if (f[e[i]]) { while (!stk.empty() && stk.back() != e[i]) { cout << stk.back() + 1 << " "; f[stk.back()]--; stk.pop_back(); } cout << e[i] + 1 << "\n"; } else { f[e[i]]++; stk.push_back(e[i]); } } return 0; }

Compilation message (stderr)

postmen.cpp: In function 'int main()':
postmen.cpp:46:20: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   46 |  for (int i = 0; i < e.size(); i++)
      |                  ~~^~~~~~~~~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...