Submission #2708580


Source Code Expand

#include <bits/stdc++.h>
#define pb push_back
#define cmin(a,b) (a>b?a=b:a)
#define cmax(a,b) (a<b?a=b:a)
#define mem(a,k) memset(a,k,sizeof(a))
#define lop(i,s,t) for(int i=s;i<(t);++i)
#define rep(i,s,t) for(int i=s;i<=(t);++i)
#define dec(i,s,t) for(int i=s;i>=(t);--i)
#define fore(i,v) for(int i=g[v],d=es[i].d;i;i=es[i].nxt,d=es[i].d)
using namespace std;

#define Pr(f,...) //fprintf(stderr,f,##__VA_ARGS__),fflush(stderr)

typedef long long ll;

template<typename T>
void read(T &x){
	x=0; 
	char c;
	for(c=getchar();!isdigit(c);c=getchar()); 
	for(;isdigit(c);c=getchar())x=x*10+c-'0'; 
}

const int N=1e5+50;

struct Query { int x,y,z,id,ans,tg; } q[N];
bool cmpTg(Query a,Query b){return a.tg<b.tg;}
bool cmpId(Query a,Query b){return a.id<b.id;}

int n,m,a[N],b[N],p[N],qn,s[N],oa[N],ob[N],os[N],top;

int find(int x){ return p[x]==x?x:find(p[x]); }

void merge(int u,int v){
	u=find(u),v=find(v);
	Pr("mrege (%d,%d)\n",u,v); 
	if(s[u]>s[v])swap(u,v);
	if(u!=v){
		p[u]=v,s[v]+=s[u];
		oa[++top]=u,ob[top]=v;
	}
}

void solve(int l,int r,int L,int R){
	Pr("solve [%d,%d] [%d,%d)\n",l,r,L,R);
	//rep(i,l,r)Pr("%d %d %d\n",q[i].x,q[i].y,q[i].z);
	//rep(i,1,n)Pr("s[%d]=%d,p[%d]=%d\n",i,s[i],i,p[i]);   
	assert(!(l<=r&&L>=R));
	if(l>r){
		lop(i,L,R)merge(a[i],b[i]); 
		top=0;
		return ; 
	}
	if(R-L==1){
		rep(i,l,r)q[i].ans=L;
		merge(a[L],b[L]);
		top=0;
		return;
	} 
	int mid=(L+R)>>1;
	Pr("mid=%d\n",mid); 
	lop(i,L,mid)merge(a[i],b[i]); 
	rep(i,l,r){
		int w=find(q[i].x)==find(q[i].y)?s[find(q[i].x)]:s[find(q[i].x)]+s[find(q[i].y)];
		q[i].tg=w<q[i].z;
	}
	sort(q+l,q+r+1,cmpTg);
	int rb=l;while(rb<=r&&q[rb].tg==0)++rb;
	while(top){
		Pr("oa=%d,ob=%d\n",oa[top],ob[top]); 
		p[oa[top]]=oa[top];
		s[ob[top]]-=s[oa[top]];
		--top;
	}
	solve(l,rb-1,L,mid);
	solve(rb,r,mid,R);
}

int main(int argc,char *argv[]){
	//freopen("dat.in","r",stdin); 
	read(n),read(m);
	rep(i,1,m)read(a[i]),read(b[i]); 
	rep(i,1,n)p[i]=i,s[i]=1;
	read(qn); 
	rep(i,1,qn){
		q[i].id=i,read(q[i].x),read(q[i].y),read(q[i].z); 
	}
	solve(1,qn,1,m+1);
	sort(q+1,q+qn+1,cmpId);
	rep(i,1,qn)printf("%d\n",q[i].ans);
	return 0;
}

Submission Info

Submission Time
Task D - Stamp Rally
User ax7e
Language C++14 (GCC 5.4.1)
Score 1000
Code Size 2210 Byte
Status AC
Exec Time 235 ms
Memory 5120 KB

Judge Result

Set Name Sample All
Score / Max Score 0 / 0 1000 / 1000
Status
AC × 1
AC × 33
Set Name Test Cases
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
Case Name Status Exec Time Memory
0_00.txt AC 1 ms 2304 KB
1_00.txt AC 120 ms 5120 KB
1_01.txt AC 139 ms 5120 KB
1_02.txt AC 125 ms 5120 KB
1_03.txt AC 150 ms 5120 KB
1_04.txt AC 126 ms 5120 KB
1_05.txt AC 148 ms 5120 KB
1_06.txt AC 127 ms 5120 KB
1_07.txt AC 147 ms 5120 KB
1_08.txt AC 128 ms 5120 KB
1_09.txt AC 144 ms 5120 KB
1_10.txt AC 133 ms 5120 KB
1_11.txt AC 147 ms 5120 KB
1_12.txt AC 142 ms 5120 KB
1_13.txt AC 152 ms 5120 KB
1_14.txt AC 147 ms 5120 KB
1_15.txt AC 142 ms 5120 KB
1_16.txt AC 234 ms 5120 KB
1_17.txt AC 209 ms 5120 KB
1_18.txt AC 209 ms 5120 KB
1_19.txt AC 235 ms 5120 KB
1_20.txt AC 206 ms 4992 KB
1_21.txt AC 221 ms 5120 KB
1_22.txt AC 207 ms 5120 KB
1_23.txt AC 206 ms 5120 KB
1_24.txt AC 201 ms 5120 KB
1_25.txt AC 213 ms 5120 KB
1_26.txt AC 217 ms 5120 KB
1_27.txt AC 209 ms 5120 KB
1_28.txt AC 215 ms 5120 KB
1_29.txt AC 205 ms 5120 KB
1_30.txt AC 208 ms 5120 KB
1_31.txt AC 208 ms 4992 KB