Advertisement
Saleh127

UVA 10301 / DSU

Jun 13th, 2022
1,124
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.98 KB | None | 0 0
  1. /***
  2.  created: 2022-06-12-14.38.54
  3. ***/
  4.  
  5. #include <bits/stdc++.h>
  6. #include <ext/pb_ds/assoc_container.hpp>
  7. #include <ext/pb_ds/tree_policy.hpp>
  8. using namespace std;
  9. using namespace __gnu_pbds;
  10. template<typename U> using ordered_set=tree<U, null_type,less<U>,rb_tree_tag,tree_order_statistics_node_update>;
  11. #define ll long long
  12. #define test int tt; cin>>tt; for(int cs=1;cs<=tt;cs++)
  13. #define get_lost_idiot return 0
  14. #define nl '\n'
  15.  
  16. ll mx=0;
  17.  
  18. vector<ll>parent(200005),rankk(200005);
  19.  
  20. void make_set(ll n)
  21. {
  22.     for(ll i=0; i<n; i++)
  23.     {
  24.         parent[i] = i;
  25.         rankk[i] = 1;
  26.     }
  27. }
  28.  
  29. ll find_set(ll v)
  30. {
  31.     if (v == parent[v])
  32.     {
  33.         return v;
  34.     }
  35.     return parent[v] = find_set(parent[v]);
  36. }
  37.  
  38. void union_sets(ll a, ll b)
  39. {
  40.     a = find_set(a);
  41.     b = find_set(b);
  42.  
  43.     if (a == b) return;
  44.  
  45.     parent[b]=a;
  46.  
  47.     rankk[a]+=rankk[b];
  48.  
  49.     rankk[b]=0;
  50.  
  51. }
  52.  
  53.  
  54. double distnc(double x,double y,double x1,double y1)
  55. {
  56.     return (x-x1)*(x-x1)+(y-y1)*(y-y1);
  57. }
  58.  
  59.  
  60. int main()
  61. {
  62.     ios_base::sync_with_stdio(0);
  63.     cin.tie(0);
  64.     cout.tie(0);
  65.  
  66.     ll n;
  67.  
  68.     while(cin>>n && n!=-1)
  69.     {
  70.         parent.resize(n);
  71.         rankk.resize(n);
  72.  
  73.  
  74.         make_set(n);
  75.  
  76.         double x[n+4],y[n+4],r[n+4];
  77.  
  78.         ll m,i,j,k,l;
  79.  
  80.         for(i=0;i<n;i++)
  81.         {
  82.             cin>>x[i]>>y[i]>>r[i];
  83.  
  84.             for(j=0;j<i;j++)
  85.             {
  86.                 double diss=distnc(x[i],y[i],x[j],y[j]);
  87.  
  88.                 if((diss-(1e-8))<=((r[i]+r[j])*(r[i]+r[j])))
  89.                 {
  90.                     if((diss+(1e-8))>=((r[i]-r[j])*(r[i]-r[j])))
  91.                     {
  92.                         union_sets(i,j);
  93.                     }
  94.                 }
  95.             }
  96.  
  97.         }
  98.  
  99.         m=0;
  100.  
  101.         if(rankk.empty()==false) m=*max_element(rankk.begin(),rankk.end());
  102.  
  103.  
  104.         cout<<"The largest component contains "<<m<<" ring";
  105.         if(m!=1) cout<<"s";
  106.         cout<<"."<<nl;
  107.  
  108.     }
  109.  
  110.  
  111.     get_lost_idiot;
  112. }
  113.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement