Submission #3425638


Source Code Expand

#include<bits/stdc++.h>
#define fr(i,n) for(int i=0;i<(n);++i)
#define foor(i,a,b) for(int i=(a);i<=(b);++i)
#define rf(i,n) for(int i=(n);i--;)
#define roof(i,b,a) for(int i=(b);i>=(a);--i)
#define elsif else if
#define all(x) x.begin(),x.end()
#define Sort(x) sort(all(x))
#define Reverse(x) reverse(all(x))
#define PQ priority_queue
#define NP(x) next_permutation(all(x))
using namespace std;            typedef vector<bool> vb; typedef vector<vb>  vvb;
                                typedef vector<int>  vi; typedef vector<vi>  vvi;
typedef long long ll;           typedef vector< ll>  vl; typedef vector<vl>  vvl;
typedef unsigned long long ull; typedef vector<ull>  vu; typedef vector<vu>  vvu;
typedef double dbl;             typedef vector<dbl>  vd; typedef vector<vd>  vvd;
typedef string str;             typedef vector<str>  vs; typedef vector<vs>  vvs;
typedef pair<int,int>pii;       typedef vector<pii>vpii; typedef map<int,int>mii;
typedef pair< ll, ll>pll;       typedef vector<pll>vpll; typedef map< ll, ll>mll;
typedef pair<dbl,dbl>pdd;       typedef vector<pdd>vpdd; typedef map<dbl,dbl>mdd;
typedef pair<str,str>pss;       typedef vector<pss>vpss; typedef map<str,str>mss;
typedef pair<int, ll>pil;       typedef vector<pil>vpil; typedef map<int, ll>mil;
typedef pair< ll,int>pli;       typedef vector<pli>vpli; typedef map< ll,int>mli;
typedef pair<dbl,int>pdi;       typedef vector<pdi>vpdi; typedef map<dbl,int>mdi;
template<typename T>vector<T>&operator<<(vector<T>&v,const T t){v.push_back(t);return v;}
template<typename T>multiset<T>&operator<<(multiset<T>&m,const T t){m.insert(t);return m;}
template<typename T>set<T>&operator<<(set<T>&s,const T t){s.insert(t);return s;}
template<typename T>stack<T>&operator<<(stack<T>&s,const T t){s.push(t);return s;}
template<typename T,typename U>PQ<T,vector<T>,U>&operator<<(PQ<T,vector<T>,U>&q,const T t){q.push(t);return q;}
template<typename T,typename U>istream&operator>>(istream&s,pair<T,U>&p){return s>>p.first>>p.second;}
template<typename T>istream&operator>>(istream&s,vector<T>&v){fr(i,v.size()){s>>v[i];}return s;}
template<typename T,typename U>ostream&operator<<(ostream&s,const pair<T,U>p){return s<<p.first<<" "<<p.second;}
//template<typename T>ostream&operator<<(ostream&s,const vector<T>v){for(auto a:v){s<<a<<endl;}return s;}
template<typename T>ostream&operator<<(ostream&s,const vector<T>v){fr(i,v.size()){i?s<<" "<<v[i]:s<<v[i];}return s;}
template<typename T,typename U>pair<T,U>operator+(pair<T,U>a,pair<T,U>b){return {a.first+b.first,a.second+b.second};}
template<typename T,typename U>pair<T,U>operator-(pair<T,U>a,pair<T,U>b){return {a.first-b.first,a.second-b.second};}
template<typename T>void print(T x){cout<<x<<endl;}
template<typename T,typename U>void print(T x,U y){cout<<x<<" "<<y<<endl;}
template<typename T,typename U,typename V>void print(T x,U y,V z){cout<<x<<" "<<y<<" "<<z<<endl;}
const int MD=1e9+7;
template<typename T>str to_string(const T&n){ostringstream s;s<<n;return s.str();}
template<typename T,typename U>vector<pair<T,U>>dijkstra(const vector<vector<pair<T,U>>>E,const U s,const T inf){using P=pair<T,U>;vector<P>d;fr(i,E.size()){d<<P{inf,i};}PQ<P,vector<P>,greater<P>>pq;pq<<(d[s]=P{0,s});while(pq.size()){P a=pq.top();pq.pop();U v=a.second;if(d[v].first>=a.first){for(P e:E[v]){if(d[v].first+e.first<d[e.second].first){d[e.second]=P{d[v].first+e.first,v};pq<<P{d[v].first+e.first,e.second};}}}}return d;}
template<typename T,typename U>map<U,pair<T,U>>dijkstra(map<U,vector<pair<T,U>>>E,const U s,const T inf){using P=pair<T,U>;map<U,P>d;for(pair<U,vector<P>>e:E){d[e.first]=P{inf,e.first};}PQ<P,vector<P>,greater<P>>pq;pq<<(d[s]=P{0,s});while(pq.size()){P a=pq.top();pq.pop();U v=a.second;if(d[v].first>=a.first){for(P e:E[v]){if(d[v].first+e.first<d[e.second].first){d[e.second]=P{d[v].first+e.first,v};pq<<P{d[v].first+e.first,e.second};}}}}return d;}
template<typename T>T distsq(pair<T,T>a,pair<T,T>b){return (a.first-b.first)*(a.first-b.first)+(a.second-b.second)*(a.second-b.second);}
template<typename T>T max(const vector<T>a){T m=a[0];for(T e:a){m=max(m,e);}return m;}
template<typename T>T min(const vector<T>a){T m=a[0];for(T e:a){m=min(m,e);}return m;}
template<typename T>T gcd(const T a,const T b){return a?gcd(b%a,a):b;}
template<typename T>T gcd(const vector<T>a){T g=a[0];for(T e:a){g=gcd(g,e);}return g;}
template<typename T>vector<T>LIS(const vector<T>A){vi B;for(T a:A){auto it=lower_bound(all(B),a);if(it==B.end()){B<<a;}else{*it=a;}}return B;}
ll strmod(const str&s,const int m){ll x=0;fr(i,s.size()){x=(x*10+s[i]-48)%m;}return x;}
vvl mul(const vvl&A,const vvl&B,const int m){vvl C;fr(y,A.size()){C<<vl(B[y].size());}fr(y,C.size()){fr(x,C[y].size()){fr(i,A[0].size()){(C[y][x]+=A[y][i]*B[i][x])%=m;}}}return C;}
vvl pow(const vvl&A,const ll n,const int m){vvl B;fr(y,A.size()){B<<vl(A.size());}if(n==0){fr(i,B.size()){B[i][i]=1;}}elsif(n%2){B=mul(A,pow(A,n-1,m),m);}else{vvl C=pow(A,n/2,m);B=mul(C,C,m);}return B;}
ll pow(const ll a,const ll n,const int m){ll t;return n?(n&1?a>=0?a%m:~-m+~a%m:1)*(t=pow(a,n>>1,m),t*t%m)%m:!!a;}
ll inv(const ll x,const int p){return pow(x,p-2,p);}
vpll fact(const int n,const int p){vpll v(n+1);v[0].first=1;foor(i,1,n){v[i].first=v[i-1].first*i%p;}v[n].second=inv(v[n].first,p);roof(i,n,1){v[i-1].second=v[i].second*i%p;}return v;}
ll C2(const int n){return(ll)n*~-n/2;}
ll sum(const vi a){ll s=0;for(int e:a){s+=e;}return s;}
ll sum(const vl a){ll s=0;for(ll e:a){s+=e;}return s;}
ll segsum(vl&s,int l,int r){l|=s.size()>>1;r|=s.size()>>1;if(l>r){return 0;}if(l==r){return s[l];}ll z=s[l]+s[r];for(;l>>1<r>>1;l>>=1,r>>=1){l&1||(z+=s[l^1]);r&1&&(z+=s[r^1]);}return z;}
void segadd(vl&s,int i,ll x){s[i|=s.size()>>1]+=x;for(;i>>1>=1;i>>=1){s[i>>1]=s[i]+s[i^1];}}
ll BITsum(vl&B,int i){ll z=0;while(i>0){z+=B[i];i-=i&-i;}return z;}
void BITadd(vl&B,int i,ll x){while(i<B.size()){B[i]+=x;i+=i&-i;}}
ll fib(const ll n,const int m){ll a,b,c,d,A,B,C,D;a=1;b=0;c=0;d=1;rf(i,63){A=a*a+b*c;B=a*b+b*d;C=c*a+d*c;D=c*b+d*d;if(n>>i&1){a=A;b=B;c=C;d=D;A=a+b;B=a;C=c+d;D=c;}a=A%m;b=B%m;c=C%m;d=D%m;}return b;}
vi primes(int n){vb b(n+1);vi p;foor(i,2,n){if(!b[i]){p<<i;for(int j=2*i;j<=n;j+=i){b[j]=true;}}}return p;}
vb isprime(const int n){vb v(n+1,true);v[0]=v[1]=false;foor(i,2,n){if(v[i]){for(int j=2*i;j<=n;j+=i){v[j]=false;}}}return v;}
// (int) * (int) => (int)
// (int) / (int) => (int)

int depth(vi&d,vi&p,int i){
	return p[i]==i?0:d[i]?:(d[i]=depth(d,p,p[i])+1);
}

int find(vi&r,int i){
	return r[i]=r[i]==i?i:find(r,r[i]);
}

int main(){cin.tie(0);ios::sync_with_stdio(false);
	int N,M;
	cin>>N>>M;
	vi r(N+M);
	vvi p(18,vi(N+M));
	fr(i,N+M)p[0][i]=r[i]=i;
	fr(i,M){
		vi ab(2);
		cin>>ab;
		vector<stack<int>>s(2);
		fr(j,2){
			--ab[j];
			while(ab[j]!=r[ab[j]]){
				s[j]<<ab[j];
				ab[j]=r[ab[j]];
			}
		}
		int x=ab[0]==ab[1]?ab[0]:N+i;
		fr(j,2){
			p[0][ab[j]]=r[ab[j]]=x;
			while(s[j].size()){
				r[s[j].top()]=x;
				s[j].pop();
			}
		}
	}
	vi d(N+M);
	fr(i,N+M){
		find(r,i);
		depth(d,p[0],i);
	}
	fr(i,17){
		fr(j,N+M){
			p[i+1][j]=p[i][p[i][j]];
		}
	}
	int Q;
	cin>>Q;
	fr(i,Q){
		int x,y;
		cin>>x>>y;
		--x;--y;
		if(r[x]!=r[y]){
			print(-1);
			continue;
		}
		if(d[x]>d[y])swap(x,y);
		rf(j,18){
			if(d[y]-d[x]>>j&1){
				y=p[j][y];
			}
		}
		rf(j,18){
			if(p[j][x]!=p[j][y]){
				x=p[j][x];
				y=p[j][y];
			}
		}
		print(p[0][x]-N+1);
	}
	return 0;
}

Submission Info

Submission Time
Task H - Union Sets
User x20
Language C++14 (GCC 5.4.1)
Score 600
Code Size 7367 Byte
Status AC
Exec Time 326 ms
Memory 18032 KB

Judge Result

Set Name Sample All
Score / Max Score 0 / 0 600 / 600
Status
AC × 3
AC × 49
Set Name Test Cases
Sample sample_01.txt, sample_02.txt, sample_03.txt
All sample_01.txt, sample_02.txt, sample_03.txt, subtask_1_1.txt, subtask_1_10.txt, subtask_1_11.txt, subtask_1_12.txt, subtask_1_13.txt, subtask_1_14.txt, subtask_1_15.txt, subtask_1_16.txt, subtask_1_17.txt, subtask_1_18.txt, subtask_1_19.txt, subtask_1_2.txt, subtask_1_20.txt, subtask_1_21.txt, subtask_1_22.txt, subtask_1_23.txt, subtask_1_24.txt, subtask_1_25.txt, subtask_1_26.txt, subtask_1_27.txt, subtask_1_28.txt, subtask_1_29.txt, subtask_1_3.txt, subtask_1_30.txt, subtask_1_31.txt, subtask_1_32.txt, subtask_1_33.txt, subtask_1_34.txt, subtask_1_35.txt, subtask_1_36.txt, subtask_1_37.txt, subtask_1_38.txt, subtask_1_39.txt, subtask_1_4.txt, subtask_1_40.txt, subtask_1_41.txt, subtask_1_42.txt, subtask_1_43.txt, subtask_1_44.txt, subtask_1_45.txt, subtask_1_46.txt, subtask_1_5.txt, subtask_1_6.txt, subtask_1_7.txt, subtask_1_8.txt, subtask_1_9.txt
Case Name Status Exec Time Memory
sample_01.txt AC 1 ms 256 KB
sample_02.txt AC 1 ms 256 KB
sample_03.txt AC 1 ms 256 KB
subtask_1_1.txt AC 1 ms 256 KB
subtask_1_10.txt AC 36 ms 4888 KB
subtask_1_11.txt AC 163 ms 7828 KB
subtask_1_12.txt AC 6 ms 4224 KB
subtask_1_13.txt AC 5 ms 768 KB
subtask_1_14.txt AC 2 ms 256 KB
subtask_1_15.txt AC 52 ms 640 KB
subtask_1_16.txt AC 6 ms 640 KB
subtask_1_17.txt AC 15 ms 384 KB
subtask_1_18.txt AC 2 ms 256 KB
subtask_1_19.txt AC 9 ms 3968 KB
subtask_1_2.txt AC 1 ms 256 KB
subtask_1_20.txt AC 2 ms 384 KB
subtask_1_21.txt AC 9 ms 256 KB
subtask_1_22.txt AC 3 ms 2304 KB
subtask_1_23.txt AC 171 ms 8440 KB
subtask_1_24.txt AC 176 ms 8440 KB
subtask_1_25.txt AC 172 ms 8436 KB
subtask_1_26.txt AC 181 ms 9168 KB
subtask_1_27.txt AC 289 ms 16496 KB
subtask_1_28.txt AC 302 ms 16496 KB
subtask_1_29.txt AC 175 ms 8440 KB
subtask_1_3.txt AC 1 ms 256 KB
subtask_1_30.txt AC 173 ms 8440 KB
subtask_1_31.txt AC 171 ms 8436 KB
subtask_1_32.txt AC 183 ms 9168 KB
subtask_1_33.txt AC 312 ms 16496 KB
subtask_1_34.txt AC 300 ms 16624 KB
subtask_1_35.txt AC 176 ms 8440 KB
subtask_1_36.txt AC 172 ms 8440 KB
subtask_1_37.txt AC 176 ms 8436 KB
subtask_1_38.txt AC 181 ms 9296 KB
subtask_1_39.txt AC 318 ms 18032 KB
subtask_1_4.txt AC 12 ms 6720 KB
subtask_1_40.txt AC 326 ms 18032 KB
subtask_1_41.txt AC 166 ms 512 KB
subtask_1_42.txt AC 170 ms 640 KB
subtask_1_43.txt AC 255 ms 11132 KB
subtask_1_44.txt AC 280 ms 16496 KB
subtask_1_45.txt AC 162 ms 512 KB
subtask_1_46.txt AC 173 ms 8440 KB
subtask_1_5.txt AC 36 ms 4524 KB
subtask_1_6.txt AC 6 ms 4404 KB
subtask_1_7.txt AC 2 ms 768 KB
subtask_1_8.txt AC 2 ms 1280 KB
subtask_1_9.txt AC 30 ms 1024 KB