Advertisement
Saleh127

UVA 11747 / MST

Sep 23rd, 2021
209
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.15 KB | None | 0 0
  1. #include <bits/stdc++.h>
  2. using namespace std;
  3. #define ll long long
  4. #define test int tt; cin>>tt; for(int cs=1;cs<=tt;cs++)
  5.  
  6. vector<ll>parent,rankk;
  7.  
  8. vector<pair<ll,pair<ll,ll>>>edge;
  9.  
  10. void make_set(ll n)
  11. {
  12. for(ll i=0; i<n; i++)
  13. {
  14. parent[i] = i;
  15. rankk[i] = 0;
  16. }
  17. }
  18.  
  19. int find_set(ll v)
  20. {
  21. if (v == parent[v])
  22. {
  23. return v;
  24. }
  25. return parent[v] = find_set(parent[v]);
  26. }
  27.  
  28. void union_sets(ll a, ll b)
  29. {
  30. a = find_set(a);
  31. b = find_set(b);
  32.  
  33. if (a != b)
  34. {
  35. if(rand()%2)
  36. {
  37. swap(a,b);
  38. }
  39. parent[b]=a;
  40.  
  41. /* else use this
  42. if (rankk[a] < rankk[b])
  43. {
  44. swap(a, b);
  45. }
  46.  
  47. parent[b] = a;
  48.  
  49. if (rankk[a] == rankk[b])
  50. {
  51. rankk[a]++;
  52. }
  53. */
  54. }
  55. }
  56.  
  57.  
  58. int main()
  59. {
  60. ios_base::sync_with_stdio(0);
  61. cin.tie(0);
  62. cout.tie(0);
  63.  
  64. ll n,m,i,j,k,l,c,d,e,f;
  65.  
  66. while(cin>>n>>m && (n+m)!=0)
  67. {
  68. l=-1;
  69. edge.clear();
  70.  
  71. parent.resize(n);
  72. rankk.resize(n);
  73.  
  74. make_set(n);
  75.  
  76. map<ll,ll>x;
  77.  
  78. for(i=0; i<m; i++)
  79. {
  80. cin>>d>>e>>f;
  81. x[f]++;
  82. edge.push_back({f,{d,e}});
  83. }
  84.  
  85. sort(edge.begin(),edge.end());
  86.  
  87.  
  88. for(auto dd:edge)
  89. {
  90. if(find_set(dd.second.second)!=find_set(dd.second.first))
  91. {
  92. x[dd.first]--;
  93. union_sets(dd.second.first,dd.second.second);
  94. }
  95. }
  96.  
  97. vector<ll>ans;
  98.  
  99. for(auto dd:x)
  100. {
  101. if(dd.second)
  102. {
  103. while(dd.second--)
  104. {
  105. ans.push_back(dd.first);
  106. }
  107. }
  108. }
  109.  
  110. if(!ans.size()) cout<<"forest"<<endl;
  111. else
  112. {
  113. sort(ans.begin(),ans.end());
  114. for(i=0;i<ans.size();i++)
  115. {
  116. if(i==ans.size()-1) cout<<ans[i]<<endl;
  117. else cout<<ans[i]<<" ";
  118. }
  119. }
  120. }
  121.  
  122. return 0;
  123. }
  124.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement