Advertisement
Zeinab_Hamdy

Untitled

Oct 18th, 2023 (edited)
717
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 3.26 KB | None | 0 0
  1. #include<bits/stdc++.h>
  2. using namespace std;
  3. #define nl "\n"
  4. #define fi first
  5. #define se second
  6. #define pb push_back
  7. #define ll long long
  8. #define ull unsigned ll
  9. #define RV  return void
  10. // #define inf 2000000000
  11. #define sz(x) int(x.size())
  12. #define all(v) v.begin(), v.end()
  13. #define rall(v) v.rbegin(), v.rend()
  14. #define Mini(x) *min_element(all(x))
  15. #define Maxi(x) *max_element(all(x))
  16. #define fixed(n) fixed << setprecision(n)
  17. #define ceil(w, m) (((w) / (m)) + ((w) % (m) ? 1 : 0))
  18. #define cin(v) for (auto&i:v) cin >> i;
  19. #define cout(v) for (auto&i:v) cout << i << " ";
  20. #define clr(memo, x) memset(memo, x, sizeof memo)
  21. #define updmin(a, b) a = min(a, b)
  22. #define updmax(a, b) a = max(a, b)
  23. #define vi vector < int >
  24. #define vl vector < ll >
  25. #define vc vector < char >
  26. #define vs vector < string >
  27. #define v2i vector < vector < int > >
  28. #define v2l vector < vector < int > >
  29. #define seti set < int >
  30. #define setl set < ll >
  31. #define mapii map < int , int >
  32. #define mapll map < ll , ll >
  33. #define mapli map < ll , int >
  34. #define mapci map < char , int >
  35. #define mapsi map < string , int >
  36. #define pll pair < ll , ll >
  37. #define pii pair < int , int >
  38. #define range(l,r,x) for(int i=l ; i < r ; i+=x)
  39. #define FastCode ios_base::sync_with_stdio(false); cin.tie(nullptr); cout.tie(nullptr);
  40. vector < string > ternary= {"NO\n" , "YES\n"};
  41.  
  42. void  Zainab(){
  43.             #ifndef ONLINE_JUDGE
  44.               freopen("input.txt", "r", stdin);
  45.               freopen("output.txt", "w", stdout);
  46.             #endif
  47. }
  48.  
  49.  
  50. /*================================  solution  ================================ */
  51.  
  52.  
  53. struct DSU{
  54.     vector < int > Parent , Size ;
  55.         DSU(int mxSize){
  56.             Parent.assign(mxSize+5 , 0);
  57.             Size.assign(mxSize+5 , 1);
  58.             for(int i=0 ; i<=mxSize ; i++)
  59.                 Parent[i]=i, Size[i]=1;
  60.         }
  61.  
  62.         int FindLeader(int node){
  63.             if(Parent[node]==node)
  64.                 return node;
  65.             return Parent[node]=FindLeader(Parent[node]);
  66.         }
  67.  
  68.         bool SameGroup(int u , int v ){
  69.             return FindLeader(u)==FindLeader(v);
  70.         }
  71.  
  72.         void MergeGroups(int u , int v){
  73.             int LeaderU = FindLeader(u);
  74.             int LeaderV = FindLeader(v);
  75.             if(LeaderU==LeaderV) return;
  76.            
  77.             if(Size[LeaderV] > Size[LeaderU])
  78.                 swap(LeaderU , LeaderV);
  79.  
  80.             Parent[LeaderV]=LeaderU;
  81.             Size[LeaderU]+=Size[LeaderV];
  82.         }
  83. };
  84.  
  85.  
  86. struct Edge{
  87.     int u , v , w ;
  88. };
  89.  
  90.  
  91. void myCode(){
  92.  
  93.  
  94. int n  , m ;
  95. cin >> n >> m ;
  96.  
  97. DSU dsu(n);
  98. vector < Edge > ans ;
  99.  
  100. for(int i =1 ;i <= m ; i++){
  101.    Edge e ;
  102.    cin >> e.u >> e.v >> e.w ;
  103.    ans.pb(e);
  104. }
  105.  
  106. sort(all(ans) , [&](Edge a , Edge b){
  107.     return a.w < b.w ;
  108. });
  109.  
  110.  
  111. for(auto& e : ans){
  112.     if(!dsu.SameGroup(e.u , e.v)){
  113.         dsu.MergeGroups(e.u , e.v);
  114.         cout << e.u << " " << e.v <<  " " << e.w << nl;
  115.     }
  116. }
  117. cout << nl;
  118.  
  119.  
  120. }
  121.  
  122.  
  123. int main(){
  124.  
  125.                     FastCode ;
  126.                     Zainab() ;
  127.  
  128.             int testCase=1;
  129.                 // cin >> testCase ;
  130.             for(int i=1 ; i<= testCase ; i++){
  131.                 //  cout << "Case #" << i << ": ";
  132.                 myCode();
  133.             }
  134.      
  135.  
  136.     return 0;
  137. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement