Submission #790391

#TimeUsernameProblemLanguageResultExecution timeMemory
790391baneSenior Postmen (BOI14_postmen)C++17
0 / 100
6 ms13908 KiB
#include<bits/stdc++.h> using namespace std; #ifdef LOCAL #include "algo/debug.h" #else #define debug(...) 42 #endif #define fr first #define sc second #define mp make_pair #define pb push_back #define pf push_front #define all(x) x.begin(),x.end() #define rall(x) x.rbegin(), x.rend() #pragma GCC target("avx2") #pragma GCC optimize("O3") #pragma GCC optimize("Ofast,unroll-loops") using ll = long long; using ull = unsigned long long; using str = string; using pii = pair<int,int>; using pll = pair<long long, long long>; const int nax = 500'001; vector<int>flag(nax); vector<vector<pair<int,int>>>adj(nax); vector<int>pracka; void Euler(int v){ for (pii& x : adj[v]){ if (flag[x.sc])continue; flag[x.sc] = 1; Euler(x.fr); } pracka.pb(v); } void solve(){ int n, m; scanf("%d %d", &n, &m); vector<pair<int,int>>edges; for (int i = 0; i < m; i++){ int a,b; scanf("%d %d", &a, &b); --a,--b; if (a > b)swap(a,b); edges.pb(mp(a,b)); } sort(edges.begin(), edges.end()); for (int i = 0; i < m; i++){ int a = edges[i].fr; int b = edges[i].sc; if (i && edges[i-1].fr == a && edges[i-1].sc == b)continue; adj[a].pb({b,i}); adj[b].pb({a,i}); } Euler(0); int r = -1; vector<vector<int>>cycles; vector<int>visited(n + 1); stack<int>c; while(r < (int)pracka.size()){ ++r; if (visited[pracka[r]]){ cycles.push_back(vector<int>()); cycles.back().push_back(pracka[r]); int inloop = 0; while(c.top() != pracka[r]){ inloop++; assert(inloop <= m); visited[c.top()] = 0; cycles.back().push_back(c.top()); c.pop(); } }else{ c.push(pracka[r]); visited[pracka[r]] = 1; } } for (int i = 0; i < (int)cycles.size() - 1; i++){ for (int j : cycles[i])printf("%d ", j + 1); printf("\n"); } } int main(){ solve(); return 0; }

Compilation message (stderr)

postmen.cpp: In function 'void solve()':
postmen.cpp:44:12: warning: ignoring return value of 'int scanf(const char*, ...)' declared with attribute 'warn_unused_result' [-Wunused-result]
   44 |       scanf("%d %d", &n, &m);
      |       ~~~~~^~~~~~~~~~~~~~~~~
postmen.cpp:48:16: warning: ignoring return value of 'int scanf(const char*, ...)' declared with attribute 'warn_unused_result' [-Wunused-result]
   48 |           scanf("%d %d", &a, &b);
      |           ~~~~~^~~~~~~~~~~~~~~~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...