제출 #141112

#제출 시각아이디문제언어결과실행 시간메모리
141112shayan_pICC (CEOI16_icc)C++14
100 / 100
138 ms632 KiB
// only miss the sun when it starts to snow #include<bits/stdc++.h> #include "icc.h" #define unit icc #define F first #define S second #define PB push_back #define sz(s) int((s).size()) #define bit(n,k) (((n)>>(k))&1) using namespace std; typedef long long ll; typedef pair<int,int> pii; typedef pair<ll,ll> pll; const int maxn=110,mod=1e9+7; const ll inf=1e18; int bos[maxn], n; vector<int> v[maxn], A, B, vec, vec0, vec1; int arr1[maxn], arr2[maxn]; bool ask(){ if(sz(A)==0 || sz(B)==0) return 0; int N=sz(A), M=sz(B); for(int i=0;i<N;i++) arr1[i]= A[i]+1; for(int i=0;i<M;i++) arr2[i]= B[i]+1; return query(N,M,arr1,arr2); } void operator += (vector<int>&a,vector<int>&b){ for(int x:b) a.PB(x); } void Merge(int a,int b){ a=bos[a], b=bos[b]; if(sz(v[a]) < sz(v[b])) swap(a,b); for(int x:v[b]) bos[x]=a, v[a].PB(x); v[b].clear(); } int solve(vector<int> &v1, vector<int>&v2){ int bt=32-__builtin_clz(sz(v1)); B=v2; int ans=0; for(int i=0;i<bt;i++){ A.clear(); for(int j=0;j<sz(v1);j++) if(bit(j,i)) A.PB(v1[j]); if(ask()) ans^=(1<<i); } return v1[ans]; } void proc(){ vec.clear(); for(int i=0;i<n;i++){ if(bos[i]==i) vec.PB(i); } int bt=32-__builtin_clz(sz(vec)); int df=-1, bts=0; for(int i=0;i<bt;i++){ A.clear(), B.clear(); for(int j=0;j<sz(vec);j++){ if(bit(j,i)) A+= v[vec[j]]; else B+= v[vec[j]]; } if(ask()){ df=i; break; } else{ bts^=(1<<i); } } assert(df!=-1); vec0=A, vec1=B; int u=solve(vec0,vec1); vec0.clear(), vec0.PB(u); vec1.clear(); int id=-1; for(int i=0;i<sz(vec);i++){ if(vec[i] == bos[u]) id=i; } assert(id!=-1); for(int i=0;i<sz(vec);i++){ if(bit(i,df)) continue; for(int j=0;j<bt;j++){ if(bit(bts,j) && bit(i,j)!=bit(id,j)) goto Hell; } vec1+= v[vec[i]]; Hell:; } int v=solve(vec1,vec0); setRoad(u+1,v+1), Merge(u,v); } void run(int N){ ::n=N; for(int i=0;i<n;i++) bos[i]=i, v[i].PB(i); for(int i=0;i<n-1;i++) proc(); }
#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...
#Verdict Execution timeMemoryGrader output
Fetching results...