fork(6) download
  1. #include <cstdio>
  2. #include <vector>
  3. #include <algorithm>
  4.  
  5. using namespace std;
  6.  
  7. class krawedz
  8. {
  9. public:
  10. int poc,kon,waga;
  11. };
  12.  
  13. bool porownaj(krawedz k1, krawedz k2)
  14. {
  15. return k1.waga < k2.waga;
  16. }
  17.  
  18. int main()
  19. {
  20. int t, ilwierzcholkow, ilkraw, a, b, waga;
  21.  
  22. scanf("%d",&t);
  23. getchar();
  24. while(t--)
  25. {
  26. scanf("n=%d,m=%d",&ilwierzcholkow,&ilkraw);
  27.  
  28. krawedz *tab;
  29. tab=new krawedz[ilkraw];
  30.  
  31. for(int i=0;i<ilkraw;i++)
  32. {
  33. getchar();
  34. scanf("{%d,%d}%d",&a,&b,&waga);
  35. tab[i].poc=a;
  36. tab[i].kon=b;
  37. tab[i].waga=waga;
  38. }
  39. getchar();
  40.  
  41. sort(tab,(tab+ilkraw),porownaj);
  42.  
  43.  
  44.  
  45. int *odw;
  46. odw=new int[ilwierzcholkow];
  47. for(int i = 0; i < ilwierzcholkow; i++)
  48. odw[i]=i;
  49.  
  50. int sumaodw=0;
  51. int sumawag=0;
  52. int aktpoc,aktkon,aktwaga;
  53. int bufor,bufor2;
  54.  
  55.  
  56. for(int i = 0; i < ilkraw; i++)
  57. {
  58. aktpoc=tab[i].poc;
  59. aktkon=tab[i].kon;
  60. aktwaga=tab[i].waga;
  61. if(odw[aktpoc]!=odw[aktkon])
  62. {
  63. sumawag+=aktwaga;
  64. sumaodw++;
  65. for(int j = 0; j < ilwierzcholkow; j++)
  66. {
  67. bufor=odw[aktkon];
  68. bufor2=odw[aktpoc];
  69. if(odw[j]==bufor)
  70. odw[j]=bufor2;
  71. }
  72. if(sumaodw==ilwierzcholkow-1)
  73. break;
  74. }
  75. }
  76. printf("%d\n",sumawag);
  77.  
  78. delete [] odw;
  79. delete [] tab;
  80. }
  81. return 0;
  82. }
  83.  
Success #stdin #stdout 0s 4484KB
stdin
2
n=6,m=9
{0,1}1 {0,5}3 {1,2}9 {1,3}7 {1,5}5 {2,3}8 {3,4}5 {3,5}2 {4,5}4
n=7,m=12
{0,1}2 {0,2}1 {0,3}2 {0,4}1 {0,5}2 {0,6}1 {1,2}4 {1,6}4 {2,3}3 {3,4}4 {4,5}6 {5,6}8
stdout
18
9