제출 #1359747

#제출 시각아이디문제언어결과실행 시간메모리
1359747Aviansh어르신 집배원 (BOI14_postmen)C++20
55 / 100
518 ms76296 KiB
#include <bits/stdc++.h>

using namespace std;

vector<vector<int>>ans;

void cycs(int st, set<int>g[], int vis[], int iter){
    vector<int>path;
    while(1){
        path.push_back(st);
        vis[st]=iter;
        if(g[st].size()){
            int i = *g[st].begin();
            if(vis[i]==iter){
                ///cycle found
                vector<int>cur;
                cur.push_back(i);
                while(path.back()!=i){
                    cur.push_back(path.back());
                    vis[path.back()]=-1;
                    path.pop_back();
                }
                cur.push_back(i);
                ans.push_back(cur);
                g[st].erase(i);
                g[i].erase(st);
                st=i;
                assert(st==path.back());
                path.pop_back();
                continue;
            }
            else{
                g[i].erase(st);
                g[st].erase(i);
                st=i;
                continue;
            }
        }
        else{
            break;
        }
    }
    if(path.size()>1&&path.front()==path.back()){
        ans.push_back(path);
    }
}

signed main(){
    ios::sync_with_stdio(0);
    cin.tie(0);
    int n,m;
    cin >> n >> m;
    set<int>g[n];
    for(int i = 0;i<m;i++){
        int a,b;
        cin >> a >> b;
        a--;b--;
        g[a].insert(b);
        g[b].insert(a);
    }
    int vis[n];
    fill(vis,vis+n,-1);
    int iter=0;
    for(int i = 0;i<n;i++){
        while(g[i].size()){
            cycs(i,g,vis,iter++);
        }
    }
    for(vector<int>v:ans){
        v.pop_back();
        for(int i : v){
            cout << i+1 << " ";
        }
        cout << "\n";
    }
    return 0;
}
#결과 실행 시간메모리채점기 출력
결과를 불러오는 중입니다…
#결과 실행 시간메모리채점기 출력
결과를 불러오는 중입니다…
#결과 실행 시간메모리채점기 출력
결과를 불러오는 중입니다…