Advertisement
Kaidul

LightOJ 1123 - Trail Maintenance

Sep 7th, 2012
75
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.25 KB | None | 0 0
  1. #include <algorithm>
  2. #include <bitset>
  3. #include <cctype>
  4. #include <cmath>
  5. #include <complex>
  6. #include <cstdio>
  7. #include <cstdlib>
  8. #include <cstring>
  9. #include <ctime>
  10. #include <deque>
  11. #include <fstream>
  12. #include <iostream>
  13. #include <list>
  14. #include <map>
  15. #include <memory>
  16. #include <queue>
  17. #include <set>
  18. #include <sstream>
  19. #include <stack>
  20. #include <string>
  21. #include <utility>
  22. #include <vector>
  23. #include <iomanip>
  24.  
  25. using namespace std;
  26.  
  27. #define REP(i,n) for(__typeof(n) i=0; i<(n); i++)
  28. #define FOR(i,a,b) for(__typeof(b) i=(a); i<=(b); i++)
  29. #define RESET(t,value) memset((t), value, sizeof(t))
  30. typedef long long int64;
  31. typedef long double d64;
  32. #define READ(f) freopen(f, "r", stdin)
  33. #define WRITE(f) freopen(f, "w", stdout)
  34. #define PI acos(-1.0)
  35. #define INF (1<<30)
  36. #define eps 1e-8
  37. #define pb push_back
  38. #define ppb pop_back
  39. #define pii pair<double,double>
  40. #define G struct node
  41.  
  42. vector < int64 > pset(10000);
  43. void initSet(int64 _size){ pset.resize(_size); FOR(i,0,_size) pset[i]=i;}
  44. int64 findSet(int64 i){return (pset[i]== i)?i: (pset[i] = findSet(pset[i]));}
  45. void unionSet(int64 i,int64 j){ pset[findSet(i)]=findSet(j);}
  46. bool isSameSet(int64 i,int64 j){ return findSet(i)==findSet(j);}
  47.  
  48. #define Max 10000
  49. G
  50. {
  51.     int64 u,v,cost;
  52.     bool operator <(const G& a) const {
  53.         return cost<a.cost;
  54.     }
  55. }g[Max+10];
  56.  
  57. vector <int64> v;
  58.  
  59. void reset()
  60. {
  61.     pset.clear();
  62.     v.clear();
  63. }
  64.  
  65. int64 mstree(int64 edge_no, int64 vertex_no)
  66. {
  67.     initSet(vertex_no+5);
  68.     sort(g,g+edge_no);
  69.     int64 mst = 0, count=0;
  70.     REP(i,edge_no)
  71.     {
  72.         if(!isSameSet(g[i].u, g[i].v))
  73.         {
  74.             v.pb(g[i].cost);
  75.             mst += g[i].cost;
  76.             unionSet(g[i].u,g[i].v);
  77.         }
  78.     }
  79.     if(v.size()!= vertex_no -1) mst = -1;
  80.     return mst;
  81. }
  82.  
  83.  
  84. int main()
  85. {
  86.     //READ("1172.txt");
  87.     int64 vertex_no, edge_no,airport_cost,mst;
  88.     int t, caseNo=1;
  89.     cin>>t;
  90.     while(t--)
  91.     {
  92.         cin>>vertex_no>>edge_no;
  93.         REP(i,edge_no) cin>>g[i].u>>g[i].v>>g[i].cost;
  94.         cout<<"Case "<<caseNo<<":\n";
  95.         FOR(i, 1, edge_no)
  96.         {
  97.             mst = mstree(i, vertex_no);
  98.             cout<<mst<<endl;
  99.             reset();
  100.         }
  101.         caseNo++;
  102.     }
  103.     return 0;
  104. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement