제출 #1262414

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

#define endl '\n'
#define pb push_back
#define pii pair<int,int>
typedef long long ll;

const int maxn=5e5+5;

vector<vector<int>> tours;
vector<pii> adj[maxn];
stack<int> s;
int used=0;
vector<bool> erased;
vector<bool> visited;
vector<int> vek;

void dfs(int v,int par,int e)
{
    s.push(v);
    visited[v]=true;
    if(e!=-1)
    {
        erased[e]=true;
        used++;
    }
    for(pii p:adj[v])
    {
        if(p.first==par||erased[p.second])continue;
        if(visited[p.first])
        {
            erased[p.second]=true;
            used++;
            while(s.top()!=p.first)
            {
                vek.pb(s.top());
                visited[s.top()]=false;
                s.pop();
            }
            return;
        }
        dfs(p.first,v,p.second);
        if(s.top()!=v)return;
        if(!vek.empty())
        {
            vek.pb(v);
            tours.pb(vek);
            vek.clear();
        }
    }
    s.pop();
    visited[v]=false;
}


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

    int n,m;
    cin>>n>>m;
    int u,v;
    for(int i=0;i<m;i++)
    {
        cin>>u>>v;
        adj[u].pb({v,i});
        adj[v].pb({u,i});
    }
    erased.resize(m);
    visited.resize(n+1);
    //u=-1;
    /*for(int i=1;i<=n;i++)
    {
        if(adj[i]%2==1)
        {
            u=i;
            break;
        }
    }*/
    ///useless, mora site da se parni za euler cycle(ne tour)
    //if(u==-1)u=1;
    //dfs(u,-1,-1);
    while(used<m)
    {
        for(int i=1;i<=n;i++)
        {
            dfs(i,-1,-1);
        }
    }
    for(auto v:tours)
    {
        for(auto x:v)cout<<x<<' ';
        cout<<endl;
    }

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