제출 #1358762

#제출 시각아이디문제언어결과실행 시간메모리
1358762opeleklanosPotemkin cycle (CEOI15_indcyc)C++20
70 / 100
1095 ms1212 KiB
#include <iostream>
#include <vector>
#include <queue>
using namespace std;

vector<vector<bool>> adj;
vector<int> vis;
vector<int> s;
int n, m; 

int dfs(int st, int target){
    vector<int> prev(n, -1); 

    queue<int> q;
    q.push(st);
    while(!q.empty()){
        int i = q.front();
        q.pop();
        vis[i] = 1;
        if(i == target){
            while(i != -1){
                cout<<i+1<<' ';
                i = prev[i];
            }
            return 1;
        }
        for(int c = 0; c<n; c++){
            if(!adj[i][c]) continue;
            if(vis[c]) continue;
            if(i == st && c == target) continue;
            vis[c] = 1;
            prev[c] = i;
            q.push(c);
        }
    }

    return 0;
}

int main(void){
    // freopen("input.txt", "r", stdin);
    cin>>n>>m;
    adj.assign(n, vector<bool>(n, 0));

    vector<pair<int, int>> edges (m, pair<int, int> {0, 0});

    for(int i = 0; i<m; i++){
        int a, b; cin>>a>>b;
        a--, b--;
        edges[i] = {a, b};
        adj[a][b] = 1;
        adj[b][a] = 1;
    }

    for(auto e:edges){
        vis.assign(n, 0);
        int l = -1, r = -1;
        for(int i = 0; i<n; i++){
            if(i == e.first || i == e.second) continue;
            if(adj[e.first][i] == 1 && adj[e.second][i] == 1) vis[i] = 1;
        }
        if(dfs(e.first, e.second)) return 0;
    }

    cout<<"no"<<endl;
    return 0;
}
#결과 실행 시간메모리채점기 출력
결과를 불러오는 중입니다…
#결과 실행 시간메모리채점기 출력
결과를 불러오는 중입니다…
#결과 실행 시간메모리채점기 출력
결과를 불러오는 중입니다…
#결과 실행 시간메모리채점기 출력
결과를 불러오는 중입니다…
#결과 실행 시간메모리채점기 출력
결과를 불러오는 중입니다…
#결과 실행 시간메모리채점기 출력
결과를 불러오는 중입니다…
#결과 실행 시간메모리채점기 출력
결과를 불러오는 중입니다…
#결과 실행 시간메모리채점기 출력
결과를 불러오는 중입니다…
#결과 실행 시간메모리채점기 출력
결과를 불러오는 중입니다…
#결과 실행 시간메모리채점기 출력
결과를 불러오는 중입니다…