# | Time | Username | Problem | Language | Result | Execution time | Memory |
---|---|---|---|---|---|---|---|
527316 | Hydroxic_Acid | Potemkin cycle (CEOI15_indcyc) | C++17 | 0 ms | 0 KiB |
This submission is migrated from previous version of oj.uz, which used different machine for grading. This submission may have different result if resubmitted.
#include <iostream>
#include <cstring>
#include <vector>
#include <queue>
using namespace std;
int N, R;
vector<int> temp[1005];
vector<int> adjl[1005];
int visited[1005];
vector<int> ans;
queue<pair<int, pair<int, vector<int> > > > q;
void dfs(int idx){
for(int i = 0; i < (int)temp[idx].size(); i++){
if((int)adjl[temp[idx][i]].size() == 0){
adjl[idx].push_back(adjl[idx][i]);
dfs(adjl[idx][i]);
}
}
}
bool dfs2(){
if(bfs(1)) return true;
for(int i = 0; i < (int)adjl[1].size(); i++){
bool result;
if(visited[adjl[1][i] == 0) result = bfs(adjl[1][i]);
if(!result) continue;
else return true;
}
return false;
}
bool bfs(int idx){
vector<int> temp;
q.push(make_pair(idx, make_pair(idx, temp)));
while(!q.empty()){
pair<int, pair<int, vector<int> > > ii = q.front(); q.pop();
if(ii.first == 1 && ii.second.first < 5) return false;
if(ii.first == 1 && ii.second.first >= 5){
ans = ii.second.second; return true;
}
if(visited[ii.first] && ii.second.first - visited[ii.first] >= 4){
ans = ii.second.second; return true;
}
if(visited[ii.first] > 0) continue;
visited[ii.first] = ii.second.first;
ii.second.second.push_back(ii.first);
for(int i = 0; i < (int)adjl[ii.first].size(); i++){
q.push(make_pair(ii.first, make_pair(ii.second.first + 1, ii.second.second)));
}
}
return false;
}
int main(){
cin >> N >> R;
for(int i = 0; i < R; i++){
int a, b; cin >> a >> b;
adjl[a].push_back(b);
adjl[b].push_back(a);
}
dfs(1);
if(dfs2()){
for(int i = 0; i < (int)ans.size(); i++){
cout << ans[i] << " ";
}
}
else{
cout << "no";
}
}