Advertisement
Riz1Ahmed

B. The Social Network( ICPC Dhaka Regional 2k19)

Sep 29th, 2019
203
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.03 KB | None | 0 0
  1. #include<bits/stdc++.h>
  2. using namespace std;
  3. const int mx=1e5;
  4. int par[mx+6],srt[mx+5],cnt;
  5. int findP(int p){
  6.     return par[p]==p? p: par[p]=findP(par[p]);
  7. }
  8. int main(){
  9.     ios_base::sync_with_stdio(false);
  10.     int t,n,q,u,v,tp,p,l,r,cs=1,i;
  11.     cin>>t;
  12.     while(t--){
  13.         cout<<"Case "<<cs++<<":\n";
  14.         cin>>n>>q;
  15.         vector<int> vc[n+5];
  16.         for (i=0; i<=n; i++) par[i]=i, srt[i]=0;
  17.         while(q--){
  18.             cin>>tp;
  19.             if (!tp){
  20.                 cin>>u>>v;
  21.                 int pu=findP(u), pv=findP(v);
  22.                 if (pu==pv) continue;
  23.                 if (vc[pv].size()<vc[pu].size()) swap(pv,pu);
  24.                 for (auto it:vc[pu]) vc[pv].push_back(it);
  25.                 par[pu]=pv;
  26.                 srt[pv]=0;
  27.             }else if (tp==1){
  28.                 cin>>u>>p;
  29.                 int pu=findP(u);
  30.                 vc[pu].push_back(p);
  31.                 srt[pu]=0;
  32.             }else{
  33.                 cin>>u>>l>>r;
  34.                 int pu=findP(u),c=0;
  35.                 if (!srt[pu]) sort(vc[pu].begin(),vc[pu].end()), srt[pu]=1;
  36.                 int low=lower_bound(vc[pu].begin(),vc[pu].end(),l)-vc[pu].begin();
  37.                 int up =upper_bound(vc[pu].begin(),vc[pu].end(),r)-vc[pu].begin();
  38.                 cout<<up-low<<endl;
  39.             }
  40.         }
  41.     }
  42.     return 0;
  43. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement