Submission #1363189

#TimeUsernameProblemLanguageResultExecution timeMemory
1363189kokorooSocial Engineering (EGOI22_socialengineering)C++20
0 / 100
0 ms440 KiB
#include<bits/stdc++.h>
//#include<atcoder/all>
 
using namespace std;
//using namespace atcoder;
#define rep(i,n) for(ll i=0; i<n; i++)
#define rrep(i,n) for(ll i=n-1; i>=0; i--)
#define print(a) cout<<a<<endl
typedef long long ll;
#define yn(flg) if(flg){cout<<"Yes"<<endl;}else{cout<<"No"<<endl;}
#define YN(flg) if(flg){cout<<"YES"<<endl;}else{cout<<"NO"<<endl;}
#define so(a) sort(a.begin(),a.end())
#define mp make_pair
#define vi vector<int>
#define vl vector<ll>
#define vs vector<string>
#define pb push_back
#define a2i(a,s) (ll)(a-s)
#define i2a(s,a) (char)(s+a)
#define ssize(a) a.size()
typedef pair<int, int> Pii;
typedef pair<int, ll> Pil;
typedef pair<pair<ll,ll>,ll> P3;
typedef pair<pair<ll,ll>,pair<ll,ll>> P4;
 
typedef pair<ll, ll> Pll;
typedef pair<ll,Pll> Plll;
typedef pair<Pii, int> Piii;
const ll INF = 1000000000000000000;
 
template<class T> inline bool chmin(T& a, T b) {
    if (a > b) {
        a = b;
        return true;
    }
    return false;
}
template<class T> inline bool chmax(T& a, T b) {
    if (a < b) {
        a = b;
        return true;
    }
    return false;
 
}
vector<int> g[200009];

void MakeMove(int v){
    cout<<v<<endl;
}
int GetMove(){
    ll v;
    cin>>v;
    return v;
}



 
int main(){
//入力
 
	cin.tie(0);
	ios::sync_with_stdio(0);

    int n,m;
    cin>>n>>m;
    vector<pair<int,int> > edges(m);

    rep(i,m){
        cin>>edges[i].first>>edges[i].second;
    }
    for(ll i=0;i<m;i++){
        int a=edges[i].first,b=edges[i].second;
        g[a].push_back(b);
        g[b].push_back(a);
    }

    vector<int> visited(n+1);
    bool b=true;
    // if(g[1].size()==0)b=false;
    visited[1]=1;
    for(ll i=0;i<g[1].size();i++){
        if(visited[g[1][i]]==0){
            queue<Pll> que;
            que.push({1,g[1][i]});

            while(!que.empty()){
                Pll p=que.front();
                que.pop();

                ll re=p.first;
                ll pos=p.second;

                visited[pos]=1;
                
                if(g[pos].size()==1){
                    b=false;
                    break;
                }
                for(auto nx:g[pos]){
                    if(nx!=re&&nx==1)break;
                    // if(nx!=re&&visited[nx]>0){
                    //     b=false;
                    //     break;
                    // }

                    if(nx!=re&&visited[nx]==0){
                        que.push({pos,nx});
                        break;
                    }
                }
                if(b==false)break;
            }
        }
        if(b==false)break;
    }

    if(b==false){
        cout<<"NO"<<endl;
        // cout<<1<<endl;
        return 0;
    }
    cout<<"YES"<<endl;
    while(1){
        ll NX=GetMove();
        if(NX==0)return 0;
        ll p=1;
        MakeMove(NX);
        bool t=true;
        while(1){
            for(auto nx:g[NX]){
                if(nx!=p){
                    MakeMove(nx);
                    p=NX;
                    NX=nx;
                    if(nx==1){
                        t=false;
                    }
                    break;                    
                }

            }
            if(t==false)break;
        }

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