提出 #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
結果
AC × 1
AC × 33
セット名 テストケース
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