提出 #68998525
ソースコード 拡げる
#include<iostream>
#include<vector>
#define pb push_back
#define pii pair<int,int>
#define fi first
#define se second
using namespace std;
const int N=1e5+10;
const int K=17+5;
const int M=N*K*8;
int n,m,q,cur,f[N],s[N],tu[N],tv[N],tx[N],ty[N],tz[N],res[N],tp[N];
int t,qi[M],pre[M],suf[M],bg[N][K],ed[N][K],px[N],py[N];
int finds(int x) {return f[x]==x?x:f[x]=finds(f[x]);}
bool check(int x,int y,int z,int k)
{
int g=(1<<k),nx=(x/g+1)*g,ny=(y/g+1)*g;
return (y==-1?nx:nx+ny)<z;
}
void ins(int ti,int k,int i)
{
qi[++t]=i; int pl=bg[ti][k],pr=suf[pl];
suf[pl]=t,pre[pr]=t,suf[t]=pr,pre[t]=pl;
}
void del(int p) {suf[pre[p]]=suf[p],pre[suf[p]]=pre[p];}
struct nod{int k,i,f;};
void cle(int ti,int lim)
{
vector <nod> ta;
for(int k=0;(1<<k)<=lim;k++)
{
int u=suf[bg[ti][k]];
while(u!=ed[ti][k])
{
int i=qi[u],fx=finds(tx[i]),fy=finds(ty[i]);
if(px[i]) del(px[i]),px[i]=0;
if(py[i]) del(py[i]),py[i]=0;
if(fx==fy)
{
if(s[fx]>=tz[i]) res[i]=cur;
else
{
while(tp[i]&&!check(s[fx],-1,tz[i],tp[i])) tp[i]--;
if(fx==ti) ta.pb({tp[i],i,0});
else ins(fx,tp[i],i),px[i]=t;
}
}
else
{
if(s[fx]+s[fy]>=tz[i]) res[i]=cur;
else
{
while(tp[i]&&!check(s[fx],s[fy],tz[i],tp[i])) tp[i]--;
if(fx==ti) ta.pb({tp[i],i,0});
else ins(fx,tp[i],i),px[i]=t;
if(fy==ti) ta.pb({tp[i],i,1});
else ins(fy,tp[i],i),py[i]=t;
}
}
u=suf[u];
}
suf[bg[ti][k]]=ed[ti][k],pre[ed[ti][k]]=bg[ti][k];
}
for(nod te:ta)
{
ins(ti,te.k,te.i);
if(te.f) py[te.i]=t;
else px[te.i]=t;
}
}
int main()
{
ios::sync_with_stdio(false),cin.tie(0),cout.tie(0);
cin>>n>>m;
for(int i=1;i<=n;i++)
{
s[i]=1,f[i]=i;
for(int k=0;k<17;k++)
{
bg[i][k]=++t,ed[i][k]=++t;
pre[ed[i][k]]=bg[i][k],suf[bg[i][k]]=ed[i][k];
}
}
for(int i=1;i<=m;i++) cin>>tu[i]>>tv[i];
cin>>q;
for(int i=1;i<=q;i++)
{
cin>>tx[i]>>ty[i]>>tz[i],tp[i]=0;
while(check(1,1,tz[i],tp[i])) tp[i]++;
if(tp[i]) tp[i]--;
ins(tx[i],tp[i],i),px[i]=t,ins(ty[i],tp[i],i),py[i]=t;
}
for(int i=1;i<=m;i++)
{
int x=finds(tu[i]),y=finds(tv[i]); cur=i;
if(x==y) continue;
if(s[x]>s[y]) swap(x,y);
int sx=s[x],sy=s[y]; s[x]=s[y]=sx+sy,f[x]=y;
cle(x,s[x]^sx),cle(y,s[y]^sy);
for(int i=0;i<17;i++) if(suf[bg[x][i]]!=ed[x][i])
{
int ly=bg[y][i],ry=suf[ly],lx=suf[bg[x][i]],rx=pre[ed[x][i]];
pre[lx]=ly,suf[ly]=lx,pre[ry]=rx,suf[rx]=ry;
}
}
for(int i=1;i<=q;i++) cout<<res[i]<<'\n';
return 0;
}
提出情報
| 提出日時 |
|
| 問題 |
D - Stamp Rally |
| ユーザ |
KSCD__ |
| 言語 |
C++ 20 (gcc 12.2) |
| 得点 |
1000 |
| コード長 |
2575 Byte |
| 結果 |
AC |
| 実行時間 |
188 ms |
| メモリ |
91308 KiB |
ジャッジ結果
| セット名 |
Sample |
All |
| 得点 / 配点 |
0 / 0 |
1000 / 1000 |
| 結果 |
|
|
| セット名 |
テストケース |
| Sample |
0_00.txt |
| All |
0_00.txt, 1_00.txt, 1_01.txt, 1_02.txt, 1_03.txt, 1_04.txt, 1_05.txt, 1_06.txt, 1_07.txt, 1_08.txt, 1_09.txt, 1_10.txt, 1_11.txt, 1_12.txt, 1_13.txt, 1_14.txt, 1_15.txt, 1_16.txt, 1_17.txt, 1_18.txt, 1_19.txt, 1_20.txt, 1_21.txt, 1_22.txt, 1_23.txt, 1_24.txt, 1_25.txt, 1_26.txt, 1_27.txt, 1_28.txt, 1_29.txt, 1_30.txt, 1_31.txt |
| ケース名 |
結果 |
実行時間 |
メモリ |
| 0_00.txt |
AC |
1 ms |
3504 KiB |
| 1_00.txt |
AC |
85 ms |
65732 KiB |
| 1_01.txt |
AC |
176 ms |
76880 KiB |
| 1_02.txt |
AC |
120 ms |
91308 KiB |
| 1_03.txt |
AC |
168 ms |
71492 KiB |
| 1_04.txt |
AC |
130 ms |
90996 KiB |
| 1_05.txt |
AC |
171 ms |
72764 KiB |
| 1_06.txt |
AC |
127 ms |
88064 KiB |
| 1_07.txt |
AC |
166 ms |
72444 KiB |
| 1_08.txt |
AC |
137 ms |
80508 KiB |
| 1_09.txt |
AC |
166 ms |
69892 KiB |
| 1_10.txt |
AC |
141 ms |
72472 KiB |
| 1_11.txt |
AC |
164 ms |
65240 KiB |
| 1_12.txt |
AC |
138 ms |
65132 KiB |
| 1_13.txt |
AC |
149 ms |
61132 KiB |
| 1_14.txt |
AC |
126 ms |
56228 KiB |
| 1_15.txt |
AC |
110 ms |
55736 KiB |
| 1_16.txt |
AC |
140 ms |
62104 KiB |
| 1_17.txt |
AC |
170 ms |
68276 KiB |
| 1_18.txt |
AC |
162 ms |
67676 KiB |
| 1_19.txt |
AC |
136 ms |
62984 KiB |
| 1_20.txt |
AC |
162 ms |
64856 KiB |
| 1_21.txt |
AC |
162 ms |
65780 KiB |
| 1_22.txt |
AC |
163 ms |
67644 KiB |
| 1_23.txt |
AC |
166 ms |
68028 KiB |
| 1_24.txt |
AC |
176 ms |
66580 KiB |
| 1_25.txt |
AC |
176 ms |
67280 KiB |
| 1_26.txt |
AC |
148 ms |
64472 KiB |
| 1_27.txt |
AC |
162 ms |
67424 KiB |
| 1_28.txt |
AC |
167 ms |
66100 KiB |
| 1_29.txt |
AC |
168 ms |
66492 KiB |
| 1_30.txt |
AC |
188 ms |
67728 KiB |
| 1_31.txt |
AC |
153 ms |
64700 KiB |