Submission #1309461

#TimeUsernameProblemLanguageResultExecution timeMemory
1309461BalsaSenior Postmen (BOI14_postmen)C++20
38 / 100
1097 ms54532 KiB
#include <bits/stdc++.h>
using namespace std;

#define all(x) (x).begin(), (x).end()
#define fi first
#define se second

using ll = long long;
const ll MAXN = 500005, MAXM = 500005;

unordered_set<ll> edges[MAXN];
bool vis[MAXN];
stack<ll> path;

ll cycle = -1;
bool dfs(ll v, ll p) {
    if (vis[v]) {
        cycle = v;
        return true;
    }
    vis[v] = 1;

    for (ll u : edges[v]) {
        if (u == p) continue;
        if (dfs(u, v)) {
            if (cycle == -1) return true;
            // erase v--u
            edges[v].erase(u);
            edges[u].erase(v);

            path.push(v);
            // cout << v << '\n';
            if (v == cycle) cycle = -1;
            return true;
        }
    }

    return false;
}

void solve() {
    ll n, m;
    cin >> n >> m;
    for (ll i = 0; i < m; i++) {
        ll v, u;
        cin >> v >> u;
        v--, u--;
        edges[v].insert(u);
        edges[u].insert(v);
    }

    for (ll v = 0; v < n; v++) {
        if (edges[v].empty()) continue;
        memset(vis, 0, sizeof(vis));
        dfs(v, -1);

        while (!path.empty()) {
            cout << path.top()+1 << ' ';
            path.pop();
        }
        cout << '\n';

        if (!edges[v].empty()) v--;
    }
}

int main() {
    // freopen("promote.in", "r", stdin);
    // freopen("promote.out", "w", stdout);
 
    ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0);
    solve();
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...