제출 #1173735

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

using namespace std;

int n, m;
vector<vector<int>> adj;
map<pair<int, int>, bool> streetCovered;
vector<bool> visited;

int streetsCovered = 0;
int startNode = 0;
bool done = false;
bool dfs(int x, int prev){
    visited[x]=true;

    for(int i = 0; i < adj[x].size(); i++){
        if(streetCovered[{x, adj[x][i]}]) continue;
        if(adj[x][i]==startNode){
            visited[x]=false;
            if(done){
                return false;
            }
            else{
                streetsCovered++;
                streetCovered[{x, adj[x][i]}]=true;
                streetCovered[{adj[x][i], x}]=true;
                done = true;
                cout << x+1;
                return true;
            }
        }
        if(adj[x][i]==prev || visited[adj[x][i]]) continue;
        streetCovered[{x, adj[x][i]}]=true;
        streetCovered[{adj[x][i], x}]=true;
        if(dfs(adj[x][i], x)){
            streetsCovered++;
            cout << " " << x+1;
            visited[x]=false;
            return true;
        }
        else{
            streetCovered[{x, adj[x][i]}]=false;
            streetCovered[{adj[x][i], x}]=false;
        }
    }

    visited[x]=false;
    return false;
}

signed main(){
    cin >> n >> m;
    adj.resize(n); visited.resize(n, false);
    for(int i = 0; i < m; i++){
        int u, v;
        cin >> u >> v; u--; v--;
        adj[u].push_back(v);
        adj[v].push_back(u);
    }
    vector<int> p(n);
    iota(p.begin(), p.end(), 0);
    sort(p.begin(), p.end(), [&](const int a, const int b){
        return adj[a].size() > adj[b].size();
    });

    int j = -1;
    while(streetsCovered<m){
        j++;
        startNode=p[j];
        done = false;
        if(dfs(p[j], -1)){
            cout << "\n";
        }
        /*for(auto u : streetCovered){
            cout << u.first.first+1 << " und " << u.first.second+1 << " = "<< u.second << "\n";
        }*/
    }
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...