제출 #1184132

#제출 시각아이디문제언어결과실행 시간메모리
1184132qrn어르신 집배원 (BOI14_postmen)C++20
55 / 100
195 ms41328 KiB
#include <bits/stdc++.h>
using namespace std;

#define SPEED ios_base::sync_with_stdio(0); cin.tie(NULL); cout.tie(NULL);
#define pb push_back
#define fi first
#define se second
#define endl "\n"
#define ALL(x) x.begin(), x.end()
#define sz(x) x.size()
#define intt long long

const intt mxN = 2e5 + 5;
const intt inf = 1e18;
const intt mod = 1e9 + 7;

vector<vector<pair<intt,intt>>> graph;
vector<intt> usedE(mxN), usedN(mxN);
vector<intt> path;
vector<vector<intt>> ans;

void dfs(intt node) {
    if(usedN[node]) { 
        vector<intt> pushla;
        while(not path.empty() && path.back() != node) {
            usedN[path.back()] = 0;
            pushla.pb(path.back());
            path.pop_back();
        } 
        pushla.pb(node);
        ans.pb(pushla);
    } else {
        usedN[node] = 1;
        path.pb(node);
    }
    intt f = 0;
    if(graph[node].empty()) {
        return;
    }
    while(usedE[graph[node].back().se]) {
        graph[node].pop_back();
        if(graph[node].empty()) {
            f = 1; break;
        }
    }
    if(f) return;
    usedE[graph[node].back().se] = 1;
    dfs(graph[node].back().fi);
}

void solve() {
    intt N, M;
    cin >> N >> M;

    graph.assign(N + 1, vector<pair<intt,intt>>{});
    for(intt i = 0; i < M; i++) {
        intt a, b;
        cin >> a >> b;
        graph[a].pb({b,i});
        graph[b].pb({a,i});
    }
    for(intt i = 1; i <= N; i++) {
        if(!graph[i].empty()) dfs(i);
    }

    for(vector<intt> &P : ans) {
        for(intt i : P) cout << i << " ";
        cout << endl;
    }//edu
}

signed main() {
    SPEED;
    intt tst = 1;
    // cin >> tst;
    while (tst--) {
        solve();
    }
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...