Submission #1138797

#TimeUsernameProblemLanguageResultExecution timeMemory
1138797Noproblem29Amusement Park (JOI17_amusement_park)C++20
69 / 100
16 ms2120 KiB
#include "Joi.h"
#include<bits/stdc++.h>
using namespace std;
#define ll long long

mt19937 rnd(262626);
vector<int>f[20000];
bool mark2[20000];
int ps[20000];
int tin2=0;
void fart(int x){
    mark2[x]=1;
    ps[x]=(++tin2)%60;
    shuffle(f[x].begin(),f[x].end(),rnd);
    for(auto i:f[x]){
        if(!mark2[i]){
            fart(i);
        }
    }
}
void Joi(int N, int M, int A[], int B[], long long X, int T) {
    for(int i=0;i<M;i++){
        f[A[i]].push_back(B[i]);
        f[B[i]].push_back(A[i]);
    }
    for(int j=0;j<N;j++){
        ps[j]=(j%60);
    }
    for(int j=0;j<N;j++){
        if(mark2[j]==0){
            fart(j);
        }
    }
    for(int i=0;i<N;i++){
        ll cur=ps[i];
        ll bt=(X>>cur)&1ll;
        MessageBoard(i,bt);
    }
}
#include "Ioi.h"
#include<bits/stdc++.h>
using namespace std;
#define ll long long

mt19937 rng(262626);
int cnt[60];
vector<int>g[20000];
bool mark[20000];
bool needtostop(){
    for(int j=0;j<60;j++){
        if(cnt[j]==-1){
            return 0;
        }
    }
    return 1;
}
int par[20000];
bool mark3[20000];
int tin=0;
void far(int x){
    mark3[x]=1;
    par[x]=(++tin)%60;
    shuffle(g[x].begin(),g[x].end(),rng);
    for(auto i:g[x]){
        if(!mark3[i]){
            far(i);
        }
    }
}
void dfs(int x){
    mark[x]=1;
    if(needtostop())return;
    for(auto i:g[x]){
        if(!mark[i]){
            cnt[par[i]]=Move(i);
            dfs(i);
            if(needtostop())return;
            cnt[par[x]]=Move(x);
        }
    }
}
long long Ioi(int n, int m, int a[], int b[], int ppos, int V, int T) {
    
    for(int i=0;i<m;i++){
        g[a[i]].push_back(b[i]);
        g[b[i]].push_back(a[i]);
    }
    for(int j=0;j<n;j++){
        par[j]=j%60;
    }
    for(int j=0;j<n;j++){
        if(mark3[j]==0){
            far(j);
        }
    }
    for(int i=0;i<60;i++){
        cnt[i]=-1;
    }
    cnt[par[ppos]]=V;
    dfs(ppos);
    ll ans=0;
    for(ll i=0;i<60;i++){
        if(cnt[i]==-1){
            cnt[i]=0;
        }
        if(cnt[i]){
            ans+=(1ll<<i);
        }
    }
    return ans;
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...