提出 #68992860
ソースコード 拡げる
#include<iostream>
#include<queue>
#define pii pair<int,int>
#define fi first
#define se second
using namespace std;
const int N=2e5+10;
int n,m,q,f[N],s[N],tu[N],tv[N],tx[N],ty[N],tz[N],id[N],res[N],cx[N],cy[N];
int finds(int x) {return f[x]==x?x:f[x]=finds(f[x]);}
struct nod
{
priority_queue <pii,vector<pii>,greater<pii>> q,e;
void ins(pii te) {q.push(te);}
void era(pii te) {e.push(te);}
int siz() {return q.size()-e.size();}
void cle()
{
while(e.size())
{
if(q.top()==e.top()) q.pop(),e.pop();
else break;
}
}
pii top() {cle(); return q.top();}
void pop() {cle(); q.pop();}
}st[N];
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,id[i]=f[i]=i;
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],cx[i]=cy[i]=(tz[i]+1)/2;
st[tx[i]].ins({cx[i],i}),st[ty[i]].ins({cy[i],i});
}
for(int i=1;i<=m;i++)
{
int x=finds(tu[i]),y=finds(tv[i]);
if(x==y) continue;
if(s[x]>s[y]) swap(x,y);
s[y]+=s[x],f[x]=y;
if(st[id[x]].siz()>st[id[y]].siz()) swap(id[x],id[y]);
while(st[id[x]].siz()) st[id[y]].ins(st[id[x]].top()),st[id[x]].pop();
while(st[id[y]].siz())
{
pii te=st[id[y]].top();
if(s[y]>=te.fi)
{
int ti=te.se,xx=tx[ti],yy=ty[ti],z=tz[ti];
if(ti>q) {st[id[y]].pop(),res[ti-q]=i; continue;}
int fx=finds(xx),fy=finds(yy);
st[id[fx]].era({cx[ti],ti}),st[id[fy]].era({cy[ti],ti});
if(fx==fy)
{
if(s[y]>=z) res[ti]=i;
else st[id[fy]].ins({z,q+ti});
}
else
{
if(s[fx]+s[fy]>=z) res[ti]=i;
else
{
int dt=z-(s[fx]+s[fy]);
cx[ti]=s[fx]+(dt+1)/2,cy[ti]=s[fy]+(dt+1)/2;
st[id[fx]].ins({cx[ti],ti}),st[id[fy]].ins({cy[ti],ti});
}
}
}
else break;
}
}
for(int i=1;i<=q;i++) cout<<res[i]<<'\n';
return 0;
}
提出情報
| 提出日時 |
|
| 問題 |
D - Stamp Rally |
| ユーザ |
KSCD__ |
| 言語 |
C++ 20 (gcc 12.2) |
| 得点 |
1000 |
| コード長 |
1928 Byte |
| 結果 |
AC |
| 実行時間 |
307 ms |
| メモリ |
37600 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 |
7 ms |
15988 KiB |
| 1_00.txt |
AC |
86 ms |
22596 KiB |
| 1_01.txt |
AC |
307 ms |
37600 KiB |
| 1_02.txt |
AC |
206 ms |
21808 KiB |
| 1_03.txt |
AC |
243 ms |
30656 KiB |
| 1_04.txt |
AC |
191 ms |
21788 KiB |
| 1_05.txt |
AC |
234 ms |
30540 KiB |
| 1_06.txt |
AC |
197 ms |
21764 KiB |
| 1_07.txt |
AC |
241 ms |
30164 KiB |
| 1_08.txt |
AC |
163 ms |
21980 KiB |
| 1_09.txt |
AC |
206 ms |
29988 KiB |
| 1_10.txt |
AC |
138 ms |
22336 KiB |
| 1_11.txt |
AC |
175 ms |
28920 KiB |
| 1_12.txt |
AC |
122 ms |
23840 KiB |
| 1_13.txt |
AC |
142 ms |
28220 KiB |
| 1_14.txt |
AC |
90 ms |
26140 KiB |
| 1_15.txt |
AC |
99 ms |
27712 KiB |
| 1_16.txt |
AC |
212 ms |
33132 KiB |
| 1_17.txt |
AC |
279 ms |
35064 KiB |
| 1_18.txt |
AC |
275 ms |
35032 KiB |
| 1_19.txt |
AC |
213 ms |
32856 KiB |
| 1_20.txt |
AC |
277 ms |
34328 KiB |
| 1_21.txt |
AC |
247 ms |
34156 KiB |
| 1_22.txt |
AC |
283 ms |
34964 KiB |
| 1_23.txt |
AC |
289 ms |
35156 KiB |
| 1_24.txt |
AC |
293 ms |
35344 KiB |
| 1_25.txt |
AC |
277 ms |
34972 KiB |
| 1_26.txt |
AC |
257 ms |
34596 KiB |
| 1_27.txt |
AC |
268 ms |
34844 KiB |
| 1_28.txt |
AC |
265 ms |
34520 KiB |
| 1_29.txt |
AC |
289 ms |
35216 KiB |
| 1_30.txt |
AC |
286 ms |
34852 KiB |
| 1_31.txt |
AC |
273 ms |
34656 KiB |