Advertisement
Guest User

kruskal

a guest
Jan 22nd, 2020
101
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.10 KB | None | 0 0
  1. #include <bits/stdc++.h>
  2.  
  3. using namespace std;
  4. ifstream fin("kruskal.in");
  5. ofstream fout("kruskal.out");
  6. struct muchie
  7. {
  8. int x,y,c;
  9. };
  10. muchie a[1001];
  11. struct afis
  12. {
  13. int x,y;
  14. };
  15. afis v[1001];
  16. int t[1001],n,m;
  17. void Union(int x,int y)
  18. {
  19. t[y]=x;
  20. }
  21. int Find(int x)
  22. {
  23. int rad,y;
  24. rad=x;
  25. while(t[rad]!=0) rad=t[rad];
  26. while(x!=rad)
  27. {
  28. y=t[x];
  29. t[x]=rad;
  30. x=y;
  31. }
  32. return rad;
  33. }
  34. void Citire()
  35. {
  36. int i;
  37. fin>>n>>m;
  38. for(i=1;i<=m;i++) fin>>a[i].x>>a[i].y>>a[i].c;
  39. }
  40. bool Cmp(muchie A, muchie B)
  41. {
  42. return A.c<B.c;
  43. }
  44. void Kruskal()
  45. {
  46. int p,q,costmin,cnt=1;
  47. sort(a+1,a+m+1,Cmp);
  48. costmin=0;
  49. for(int i=1;i<=m;i++)
  50. {
  51. p=Find(a[i].x);
  52. q=Find(a[i].y);
  53. if(p!=q)
  54. {
  55. v[cnt].x=a[i].x;
  56. v[cnt].y=a[i].y;
  57. cnt++;
  58. costmin+=a[i].c;
  59. Union(p,q);
  60. }
  61. }
  62. fout<<costmin<<"\n";
  63. for(int i=1;i<cnt;i++) fout<<v[i].x<<" "<<v[i].y<<"\n";
  64. }
  65. int main()
  66. {
  67. Citire();
  68. Kruskal();
  69. return 0;
  70. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement