Advertisement
TLE

SPOJ - 3188. Minimum Spanning Tree

TLE
Nov 12th, 2014
212
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.67 KB | None | 0 0
  1. #include<bits/stdc++.h>
  2.  
  3. using namespace std;
  4.  
  5. #define pf(x) printf("%d",x)
  6. #define pfd(x,y) printf("%d %d",x,y)
  7. #define pfl(x) printf("%ld",x)
  8. #define nl printf("\n")
  9.  
  10. #define cs(x) printf("Case %d: ",x)
  11. #define csn(x) printf("Case %d:\n",x)
  12.  
  13. #define all(x) x.begin(),x.end()
  14. #define Find(x,n) find(all(x),n)
  15. #define pi acos(-1.0)
  16. #define i64 long long
  17. #define pb(x) push_back(x)
  18. #define mset(x,v) memset(x,v,sizeof(x))
  19. #define sc(n) scanf("%d",&n)
  20. #define scl(n) scanf("%ld",&n)
  21. #define scd(n,m) scanf("%d %d",&n,&m)
  22. #define scdl(n,m) scanf("%ld %ld",&n,&m)
  23. #define filein freopen("in.txt","r",stdin)
  24. #define fileout freopen("my.txt","w",stdout)
  25. #define inf 100000
  26. #define MAX 10001
  27. #define MOD 4294967296
  28.  
  29. bool isUpper(char ch){ if( ch>='A' && ch<='Z' ) return true; return false; }
  30. bool isLower(char ch){ if( ch>='a' && ch<='z') return true; return false;}
  31. bool isLetter(char ch){ if( ch>='A' && ch<='Z' || ch>='a' && ch<='z') return true; return false; }
  32. bool isDigit(char ch){ if( ch>='0' && ch<='9') return true; return false; }
  33. char toLower(char ch){ if (isUpper(ch)) return (ch+32); return ch; }
  34. char toUpper(char ch){ if (isLower(ch)) return (ch-32); return ch; }
  35.  
  36. template<class T>bool isEven(T a){ return (a%2==0);}
  37. template<class T>T sq(T a){ return (a*a); }
  38. template<class T>T gcd(T a,T b){ return b==0 ? a : gcd(b,a%b); }
  39. template<class T>T lcm(T a,T b){ return (a/gcd(a,b))*b; }
  40. template<class T>bool isPrime(T n){ for(T i=2; i*i<=n; i++){ if(n%i==0) return false; } return true; }
  41. template<class T>T Pow(T n,T p) { T res=n; for(T i=1;i<p; i++){ res *= n; } return res; }
  42. template<class T>T Max(T n,T p) { if(n>=p) return n; return p; }
  43. template<class T>T ABS(T n) { return (n<0) ?  (-n) :  n; }
  44.  
  45. struct node
  46. {
  47.     int u,v;
  48.     i64 w;
  49.     node( int U,int V,i64 W ) { u=U; v=V; w=W; }
  50.     bool operator < ( const node& p )const { return w < p.w;}
  51. };
  52.  
  53. vector<node>g;
  54. int par[MAX];
  55.  
  56. int parent(int x){
  57.     return (par[x]==x) ? x : parent(par[x]);
  58. }
  59.  
  60. i64 mst(int n){
  61.     int sz=g.size();
  62.     int  nodes=0;
  63.     i64 res=0;
  64.     for(int i=0;i<sz;i++){
  65.         int u=parent(g[i].u);
  66.         int v=parent(g[i].v);
  67.         if( u!=v ){
  68.             par[u]=v;
  69.             res += g[i].w;
  70.             nodes++;
  71.             if( nodes == n-1 ) return res;
  72.         }
  73.     }
  74. }
  75.  
  76. int main()
  77. {
  78.     int n,m;
  79.     while( scanf("%d %d",&n,&m) == 2 ){
  80.         for(int i=0;i<m;i++){
  81.             int u,v;
  82.             i64 w;
  83.             scanf("%d %d %lld",&u,&v,&w);
  84.             par[u]=u;
  85.             par[v]=v;
  86.             g.pb( node(u,v,w) );
  87.         }
  88.         sort( all(g) );
  89.         printf("%lld\n",mst(n));
  90.         g.clear();
  91.     }
  92.     return 0;
  93. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement