fork download
  1. #include <bits/stdc++.h>
  2.  
  3. using namespace std;
  4.  
  5. #define READ(f) freopen(f, "r", stdin)
  6. #define WRITE(f) freopen(f, "w", stdout)
  7.  
  8. #define rep(i,n) for(int i = 0 ; i < (n) ; i++)
  9. #define iter(i,a,b) for(int i = (a) ; i < (b) ; i++)
  10. #define mem(a,b) memset(a,b,sizeof(a))
  11.  
  12. typedef long long ll;
  13. typedef pair<int,int> pii;
  14. typedef pair<int,pii> iii;
  15. typedef vector <pii> vii;
  16.  
  17. #define INF 1000000000
  18. #define MAXX 200005
  19.  
  20. vii adj_l[MAXX];
  21. vector<bool> taken;
  22. priority_queue<pii> pq;
  23. int V, E;
  24.  
  25. void init(){
  26. rep(i, MAXX){
  27. adj_l[i].clear();
  28. }
  29. taken.clear();
  30. while(!pq.empty())
  31. pq.pop();
  32. }
  33.  
  34. void input(int u, int v, int w){
  35. adj_l[u].push_back(make_pair(v, w));
  36. adj_l[v].push_back(make_pair(u, w));
  37. }
  38.  
  39. void process(int src){
  40. taken[src] = true;
  41. rep(i, (int)adj_l[src].size()){
  42. pii v = adj_l[src][i];
  43. if(!taken[v.first])
  44. pq.push(pii(-v.second, -v.first));
  45. }
  46. }
  47.  
  48. int primMST(int src){
  49. process(src);
  50. int mst_cost = 0;
  51. while(!pq.empty()){
  52. pii nxt = pq.top();
  53. pq.pop();
  54. int u = -nxt.second;
  55. int w = -nxt.first;
  56. if(!taken[u]){
  57. mst_cost += w;
  58. process(u);
  59. }
  60. }
  61. printf("%d\n", mst_cost);
  62. }
  63.  
  64. int main(){
  65. READ("UVa 11631.txt");
  66. int u, v, w;
  67. while(1){
  68. cin>>V>>E;
  69. if(V == 0 && E == 0)
  70. break;
  71. init();
  72. rep(i, E){
  73. cin>>u>>v>>w;
  74. input(u, v, w);
  75. }
  76. primMST(0);
  77. }
  78. return 0;
  79. }
  80.  
  81.  
Success #stdin #stdout 0s 19920KB
stdin
7 11
0 1 7
0 3 5
1 2 8
1 3 9
1 4 7
2 4 5
3 4 15
3 5 6
4 5 8
4 6 9
5 6 11
0 0
stdout
Standard output is empty