Submission #1340004

#TimeUsernameProblemLanguageResultExecution timeMemory
1340004aaaaaaaa어르신 집배원 (BOI14_postmen)C++20
0 / 100
2 ms344 KiB
#include <bits/stdc++.h>
using namespace std;

const int mxN = 5e5 + 100;

vector<pair<int, int>> adj[mxN];
bool vis[mxN];
vector<int> cur;
vector<vector<int>> ans;

void dfs(int u = 1){
    while(adj[u].size()){
        auto [v, i] = adj[u].back();
        adj[u].pop_back();
        if(!vis[i]){
            vis[i] = 0;
            dfs(v);
        }
    }
    cur.push_back(u);
}

int main(){
    ios_base::sync_with_stdio(0);
    cin.tie(0);

    int n, m;

    cin >> n >> m;

    for(int i = 1; i <= m; ++i){
        int u, v;
        cin >> u >> v;
        adj[u].push_back({v, i});
        adj[v].push_back({u, i});
    }

    dfs(1);

    vector<int> seen(n + 1, 0);
    vector<vector<int>> ans;
    stack<int> stk;



    for(int i = (int) cur.size() - 1; i >= 0; --i){
        if(seen[cur[i]]){
            vector<int> x = {cur[i]};
            while(stk.size() && stk.top() != cur[i]) {
                seen[stk.top()] = 0;
                x.push_back(stk.top());
                stk.pop();
            }
            ans.push_back(x);
        }else{
            seen[cur[i]] = 1;
            stk.push(cur[i]);
        }
    }

    for(auto v : ans){
        for(auto u : v){
            cout << u << " ";
        }
        cout << "\n";
    }

    return 0;
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...