#include "Joi.h"
#include<bits/stdc++.h>
#define int long long
#define ld double
#define _1 first
#define _2 second
#define yes cout<<"Yes\n"
#define nah cout<<"No\n"
#define FFF ios_base::sync_with_stdio(0);cin.tie(0);
#define ipr pair<int,int>
#define ret return
#define intt int32_t
#define mid ((l+r)/2)
#define pb push_back
#define lll __int128
using namespace std;
int tst, ts;
intt mo = 998244353, dx[] = {0, 1, 0, -1}, dy[] = {-1, 0, 1, 0};
int mul( int x, int y ) {
ret ( ( x % mo ) * ( y % mo ) ) % mo;
ret x*y;
}
int pwo( int x, int y ) {
int res = 1;
for( int i = 63; i + 1; i-- )
res = mul( res, res * ( ( 1ll << i )&y ? x : 1 ) );
ret res;
}
int dvii( int x, int y ) {
ret mul( x, pwo( y, mo - 2 ) );
}
int oo( char x ) {
ret ( int )x - '0';
}
int lgg( int x, int y ) {
int u = 0;
while( x ) {
u++;
x /= y;
}
ret u;
}
int mun( int x, int y ) {
while( x < y )x += mo;
ret ( x - y ) % mo;
}
int add( int x, int y ) {
ret x + y - ( mo * ( x + y >= mo ) );
ret x + y;
}
int lcm( int x, int y ) {
ret ( x * y ) / __gcd( x, y );
}
#define endl '\n';
const int N = 3e4+ 7, N2 = 5e3 + 7, inf = 2e18+7 ;
vector<int>v,vt,vv(N,62),g[N],gt[N],ds[N],vi(N),p(N);
void dft(int i,int d,int pr){
if(vi[i])
ret;
vi[i]=1;
if(pr!=-1)
g[pr].pb(i);
p[i]=pr;
ds[d].pb(i);
for(auto it:gt[i]){
if(it==pr)
continue;
dft(it,d+1,i);
}
}
void dfs(int i,int d,int pr){
vv[i]=vt[d];
for(auto it:g[i])
if(it!=pr)
dfs(it,d+1,i);
}
void Joi(intt n,intt M, intt A[], intt B[], int X, intt T){
for(int i=0;i<M;i++)
gt[A[i]].pb(B[i]),gt[B[i]].pb(A[i]);
dft(0,0,-1);
for(int i=0;i<n;i++){
if(ds[i].size()&&i>58)
T=1000;
if(ds[i].size()==0||v.size()>59)
continue;
for(auto it:ds[i]){
if(v.size()>59)
break;
vv[it]=v.size();
v.pb(it);
}
}
if(T==1000){
set<int>ss;
for(int i=0;i<n;i++){
for(auto it:ds[i]){
int o=i%60;
vv[it]=o;
intt u=min(1ll,(1ll<<o)&X);
MessageBoard((intt)it,u);
ss.insert(it);
}
}
for(int i=0;i<n;i++){
if(!ss.count(i)){
cout<<i<<endl;
MessageBoard(i,0);
}
}
ret;
}
for(int i=1;i<n;i++){
if(vv[p[i]]==62||vv[i]!=62)
continue;
set<int>st;
vt.clear();
int o=i;
while(o!=0)
o=p[o],st.insert(o);
for(int i=59;i>=0;i--)
if(!st.count(v[i]))
vt.pb(i);
dfs(i,0,p[i]);
}
int o=0;
for(int i=0;i<60;i++)
o+=(X&(1ll<<i));
for(intt i=0;i<n;i++){
intt u=i;
intt y=min(1ll,X&(1ll<<vv[i]));
MessageBoard(u,y);
}
}
#include "Ioi.h"
#include<bits/stdc++.h>
#define int long long
#define ld double
#define _1 first
#define _2 second
#define yes cout<<"Yes\n"
#define nah cout<<"No\n"
#define FFF ios_base::sync_with_stdio(0);cin.tie(0);
#define ipr pair<int,int>
#define ret return
#define intt int32_t
#define mid ((l+r)/2)
#define pb push_back
#define lll __int128
using namespace std;
int tst, ts;
intt mo = 998244353, dx[] = {0, 1, 0, -1}, dy[] = {-1, 0, 1, 0};
int mul( int x, int y ) {
ret ( ( x % mo ) * ( y % mo ) ) % mo;
ret x*y;
}
int pwo( int x, int y ) {
int res = 1;
for( int i = 63; i + 1; i-- )
res = mul( res, res * ( ( 1ll << i )&y ? x : 1 ) );
ret res;
}
int dvii( int x, int y ) {
ret mul( x, pwo( y, mo - 2 ) );
}
int oo( char x ) {
ret ( int )x - '0';
}
int lgg( int x, int y ) {
int u = 0;
while( x ) {
u++;
x /= y;
}
ret u;
}
int mun( int x, int y ) {
while( x < y )x += mo;
ret ( x - y ) % mo;
}
int add( int x, int y ) {
ret x + y - ( mo * ( x + y >= mo ) );
ret x + y;
}
int lcm( int x, int y ) {
ret ( x * y ) / __gcd( x, y );
}
#define endl '\n';
const int M =1007, N = 3e4+ 7, N2 = 5e3 + 7, inf = 2e18+7 ;
vector<int>v,vt,vv(N,62),g[N],gt[N],ds[N],vi(N),p(N),an(N);
set<int>s;
int uu;
int ff(int x) {
for(int i=0; i<60; i++)
if(x==v[i])
ret 1;
ret 0;
}
void dfa(int i) {
s.erase(vv[i]);
for(auto it:g[i]) {
if(it==p[i])
continue;
if(ff(it)==0||!s.count(vv[it])) {
//cout<<it<<" "<<ff(it)<<" "<<vv[it]<<endl;
continue;
}
uu=it;
an[vv[it]]=Move(it);
dfa(it);
}
if(p[i]!=-1) {
s.erase(vv[p[i]]);
uu=p[i],an[vv[uu]]=Move(p[i]);
}
}
void dft(int i,int d,int pr) {
if(vi[i])
ret;
vi[i]=1;
if(pr!=-1)
g[pr].pb(i);
p[i]=pr;
ds[d].pb(i);
for(auto it:gt[i]) {
if(it==pr)
continue;
dft(it,d+1,i);
}
}
void dfs(int i,int d,int pr) {
vv[i]=vt[d];
for(auto it:g[i])
if(it!=pr)
dfs(it,d+1,i);
}
int Ioi(intt n, intt M, intt A[], intt B[], intt P, intt V, intt T) {
int l=uu;
set<pair<int, int> > edges;
for(int i=0; i<M; i++) {
gt[A[i]].pb(B[i]),gt[B[i]].pb(A[i]);
edges.insert({ A[i], B[i] });
edges.insert({ B[i], A[i] });
}
dft(0,0,-1);
for(int i=0; i<n; i++) {
if(ds[i].size()&&i>58)
T=1000;
if(ds[i].size()==0||v.size()>59)
continue;
for(auto it:ds[i]) {
if(v.size()>59)
break;
vv[it]=v.size();
v.pb(it);
}
}
for(int i=0; i<n; i++) {
if(ds[i].size()&&i>58)
T=1000;
}
if(T==1000)
for(int i=0; i<n; i++)
for(auto it:ds[i]) {
int o=i%60;
vv[it]=o;
}
an[vv[P]]=V;
for(int i=0; i<60; i++)
s.insert(i);
s.erase(vv[P]);
if(T==1000) {
while(s.size()&&P!=0) {
P=p[P];
an[vv[P]]=Move(P);
s.erase(vv[P]);
}
int o=ds[59][0];
vector<int>vp;
while(o!=0){
vp.pb(o);
o=p[o];
}
o=vp.size();
while(s.size()) {
o--;
P=vp[o];
an[vv[P]]=Move(P);
s.erase(vv[P]);
}
o=0;
for(int i=0; i<60; i++)
o+=(an[i]*(1ll<<i));
ret o;
}
for(int i=1; i<n; i++) {
if(vv[p[i]]==62||vv[i]!=62)
continue;
set<int>st;
vt.clear();
int o=i;
while(o!=0)
o=p[o],st.insert(o);
for(int i=59; i>=0; i--)
if(!st.count(v[i]))
vt.pb(i);
dfs(i,0,p[i]);
}
while(P!=0&&ff(P)==0) {
P=p[P];
an[vv[P]]=Move(P);
s.erase(vv[P]);
}
uu=P;
while(P!=0)
dfa(P),P=p[P];
dfa(0);
int o=0;
for(int i=0; i<60; i++)
o+=(an[i]*(1ll<<i));
ret o;
}
# | 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... |