Submission #1363519

#TimeUsernameProblemLanguageResultExecution timeMemory
1363519hsuan._.0528Social Engineering (EGOI22_socialengineering)C++20
15 / 100
5 ms8260 KiB
#include<bits/stdc++.h>
using namespace std;
#define LL long long
#define pii pair<int, int>
#define F first
#define S second
const int maxn =5e5+10;
const int mod=1e9+7;

int n, m;
int dp[20][100000];
vector<pii> v[maxn];

int dfs(int x, int mask){
    if(dp[x][mask] != -1)  return dp[x][mask];
    
    bool b=0;
    if(x==1){
        for(auto[y, id]: v[x]){
            if( ((1<<id) & mask) == 0){
                if( dfs(y, ((1<<id) | mask) ) == 1)  b=1;
            }
        }
    }else{
        b=1;
        for(auto[y, id]: v[x]){
            if( ((1<<id) & mask) == 0){
                if( dfs(y, ((1<<id) | mask) ) == 0)  b=0;
            }
        }
    }
    dp[x][mask]=b;
    return b;
}


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



signed main(){
    //ios_base::sync_with_stdio(0);  cin.tie(0);
    cin>>n>>m;
    for(int i=0; i<m; i++){
        int x, y;  cin>>x>>y;
        v[x].push_back( {y, i} );
        v[y].push_back( {x, i} );
    }
    memset(dp, -1, sizeof(dp));
    if (dfs(1, 0) == 1) {
        cout << "NO" << endl;
        return 0;
    }
    cout << "YES" << endl;
    int cur=1, mask=0;
    while(true){
        int a=GetMove();
        if(a==0){
          
          return 0;
        }
        for(auto[y, id] : v[1]){
            if(y==a){
                mask |= (1<<id);
                 break;
            }
        }
        cur=a;
        

        for(auto[y, id]: v[cur]){
            if( ((1<<id) & mask) == 0)
                if( dfs(y, ((1<<id) | mask) ) == 0){
                    cur=y;  mask = ((1<<id) | mask);
                    break;
                }
        }
        MakeMove(cur);
        while(cur!=1){
            for(auto[y, id]: v[cur]){
                if( ((1<<id) & mask) == 0)
                    if( dfs(y, ((1<<id) | mask) ) == 0){
                        cur=y;  mask = ((1<<id) | mask);
                        break;
                    }
            }
            MakeMove(cur);
        }
    }
   // cout << "NO" << endl;
    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...