#include"Joi.h"
#include<bits/stdc++.h>
using namespace std;
#define foru(i,a,b) for(int i=(a); i<=(b); ++i)
#define ford(i,a,b) for(int i=(a); i>=(b); --i)
#define rep(i,a) for(int i=0; i<(a); ++i)
#define sz(a) (int)(a).size()
#define all(a) (a).begin(),(a).end()
#define bit(s,i) (((s)>>(i))&1)
#define ii pair<int,int>
#define fi first
#define se second
#define pb push_back
#define eb emplace_back
#define ll long long
#define _ << " " <<
namespace joi{
    const int MAX = 10005;
    int n,m,id[MAX],deg[MAX]; /// id: chua dinh nao
    bitset<MAX> isEdge[MAX];
    vector<int> adj[MAX];
    array<int,60> st[MAX];
    int par[MAX];
    int find(int a){
        return par[a]==0?a:par[a]=find(par[a]);
    }
    bool unite(int a, int b){
        a=find(a); b=find(b);
        if(a==b)return false;
        par[b]=a;
        return true;
    }
    bool vis[MAX]; /// init verteces
    void build_first(){
        array<int,60> arr; int cnt=0;
        queue<int> q; q.push(0); vis[0]=1; id[0]=cnt; arr[cnt++]=0;
        while(q.size()){
            int u=q.front(); q.pop();
            for(int v:adj[u]) if(!vis[v]){
                if(cnt==60) break;
                q.push(v); vis[v]=1; id[v]=cnt; arr[cnt++]=v;
            }
        }
        assert(cnt==60);
        rep(i,cnt) st[arr[i]]=arr;
    }
    void extend(){
        queue<int> q;
        rep(i,n) if(vis[i]) q.push(i);
        while(q.size()){
            int u=q.front(); q.pop();
            int d1=-1;
            foru(i,0,59) foru(j,i+1,59){
                if(isEdge[st[u][i]][st[u][j]]){
                    ++deg[st[u][i]]; ++deg[st[u][j]];
                }
            }
            rep(i,60) if(st[u][i]!=u && deg[st[u][i]]==1){
                d1=i; break;
            }
            foru(i,0,59) foru(j,i+1,59){
                if(isEdge[st[u][i]][st[u][j]]){
                    --deg[st[u][i]]; --deg[st[u][j]];
                }
            }
            assert(d1!=-1);
            for(int v:adj[u]) if(!vis[v]){
                st[v]=st[u];
                id[v]=id[st[v][d1]];
                st[v][d1]=v;
                q.push(v); vis[v]=1;
            }
        }
    }
    void Joi(int N, int M, int A[], int B[], long long X, int T) {
        /// build lai canh
        n=N, m=M;
        rep(i,m){
            if(unite(A[i],B[i])){
                isEdge[A[i]][B[i]]=1;
                isEdge[B[i]][A[i]]=1;
                adj[A[i]].eb(B[i]);
                adj[B[i]].eb(A[i]);
            }
        }
        build_first();
        extend();
        rep(i,N) MessageBoard(i,X>>id[i]&1);
    }
}
void Joi(int N, int M, int A[], int B[], long long X, int T) {
    joi::Joi(N,M,A,B,X,T);
}
#include"Ioi.h"
#include<bits/stdc++.h>
using namespace std;
#define foru(i,a,b) for(int i=(a); i<=(b); ++i)
#define ford(i,a,b) for(int i=(a); i>=(b); --i)
#define rep(i,a) for(int i=0; i<(a); ++i)
#define sz(a) (int)(a).size()
#define all(a) (a).begin(),(a).end()
#define bit(s,i) (((s)>>(i))&1)
#define ii pair<int,int>
#define fi first
#define se second
#define pb push_back
#define eb emplace_back
#define ll long long
#define _ << " " <<
namespace ioi{
    const int MAX=10005;
    int n,m,id[MAX],deg[MAX]; /// id: chua dinh nao
    bitset<MAX> isEdge[MAX];
    vector<int> adj[MAX];
    array<int,60> st[MAX];
    int par[MAX];
    int find(int a){
        return par[a]==0?a:par[a]=find(par[a]);
    }
    bool unite(int a, int b){
        a=find(a); b=find(b);
        if(a==b)return false;
        par[b]=a;
        return true;
    }
    bool vis[MAX]; /// init verteces
    void build_first(){
        array<int,60> arr; int cnt=0;
        queue<int> q; q.push(0); vis[0]=1; id[0]=cnt; arr[cnt++]=0;
        while(q.size()){
            int u=q.front(); q.pop();
            for(int v:adj[u]) if(!vis[v]){
                if(cnt==60) break;
                q.push(v); vis[v]=1; id[v]=cnt; arr[cnt++]=v;
            }
        }
        assert(cnt==60);
        rep(i,cnt) st[arr[i]]=arr;
    }
    void extend(){
        queue<int> q;
        rep(i,n) if(vis[i]) q.push(i);
        while(q.size()){
            int u=q.front(); q.pop();
            int d1=-1;
            foru(i,0,59) foru(j,i+1,59){
                if(isEdge[st[u][i]][st[u][j]]){
                    ++deg[st[u][i]]; ++deg[st[u][j]];
                }
            }
            rep(i,60) if(st[u][i]!=u && deg[st[u][i]]==1){
                d1=i; break;
            }
            foru(i,0,59) foru(j,i+1,59){
                if(isEdge[st[u][i]][st[u][j]]){
                    --deg[st[u][i]]; --deg[st[u][j]];
                }
            }
            assert(d1!=-1);
            for(int v:adj[u]) if(!vis[v]){
                st[v]=st[u];
                id[v]=id[st[v][d1]];
                st[v][d1]=v;
                q.push(v); vis[v]=1;
            }
        }
    }
    int res[60]; bool inP[MAX];
    void dfsAnswer(int u, int p=-1){
        for(int v:adj[u]) if(inP[v] && v!=p){
            res[id[v]]=Move(v);
            dfsAnswer(v,u);
            Move(u);
        }
    }
    long long Ioi(int N, int M, int A[], int B[], int P, int V, int T) {
        /// build lai canh
        n=N, m=M;
        rep(i,m){
            if(unite(A[i],B[i])){
                isEdge[A[i]][B[i]]=1;
                isEdge[B[i]][A[i]]=1;
                adj[A[i]].eb(B[i]);
                adj[B[i]].eb(A[i]);
            }
        }
        build_first();
        extend();
        res[id[P]]=V;
        rep(i,60) inP[st[P][i]]=1;
        dfsAnswer(P);
        ll x=0;
        rep(i,60) if(res[i]) x|=(1LL<<i);
        return x;
    }
}
long long Ioi(int N, int M, int A[], int B[], int P, int V, int T){
    return ioi::Ioi(N,M,A,B,P,V,T);
}
| # | Verdict | Execution time | Memory | Grader output | 
|---|
| Fetching results... | 
| # | Verdict | Execution time | Memory | Grader output | 
|---|
| Fetching results... | 
| # | Verdict | Execution time | Memory | Grader output | 
|---|
| Fetching results... | 
| # | Verdict | Execution time | Memory | Grader output | 
|---|
| Fetching results... | 
| # | Verdict | Execution time | Memory | Grader output | 
|---|
| Fetching results... |