Source code for submission s1226

Go to diff to previous submission

spider.cpp

  1. #include <algorithm>
  2. #include <cctype>
  3. #include <cmath>
  4. #include <complex>
  5. #include <cstdio>
  6. #include <cstring>
  7. #include <iomanip>
  8. #include <iostream>
  9. #include <list>
  10. #include <map>
  11. #include <queue>
  12. #include <set>
  13. #include <sstream>
  14. #include <stack>
  15. #include <string>
  16. #include <utility>
  17. #include <vector>
  18.  
  19. using namespace std;
  20. #define DEBUG(x) cerr << ">>> " << #x << " : " << x << endl;
  21. #define REP(i,a) for (int i = 0; i < (a); ++i)
  22. #define FOR(i,a,b) for (int i = (a); i <= (b); ++i)
  23. #define FORD(i,a,b) for (int i = (a); i >= (b); --i)
  24. inline bool EQ(double a, double b) { return fabs(a-b) < 1e-9; }
  25.  
  26. const int INF = 1<<29;
  27. typedef long long ll;
  28. //////////////////////////////////
  29.  
  30. #define MAXN 1111111
  31. int N, M;
  32. //vector<int> graph[MAXN], cost[MAXN];
  33. int eA[MAXN], eB[MAXN], eC[MAXN], e[MAXN];
  34.  
  35. int father[MAXN], rank[MAXN];
  36.  
  37. int root(int v){
  38. if(father[v] == -1) return v;
  39. return (father[v] = root(father[v]));
  40. }
  41.  
  42. int used;
  43. int DFU(int edge){
  44. int a = eA[edge], b = eB[edge], c = eC[edge];
  45. int ca = root(a), cb = root(b);
  46. if(ca == cb) return 0;
  47. if(rank[ca] < rank[cb]) father[ca] = cb;
  48. else if(rank[ca] > rank[cb]) father[cb] = ca;
  49. else{
  50. father[ca] = cb;
  51. rank[cb]++;
  52. }
  53. used++;
  54. return c;
  55. }
  56.  
  57. bool cmp(int a, int b){
  58. return eC[a] < eC[b];
  59. }
  60.  
  61. int main() {
  62. while(scanf("%d%d", &N, &M) != EOF){
  63. int m = 0;
  64. REP(i, M){
  65. int a, b, c;
  66. scanf("%d%d%d", &a, &b, &c);
  67. a--; b--;
  68. eA[i] = a;
  69. eB[i] = b;
  70. eC[i] = c;
  71. // graph[a].push_back(b);
  72. // graph[b].push_back(a);
  73.  
  74. // cost[a].push_back(c);
  75. // cost[b].push_back(c);
  76. e[i] = i;
  77. father[i] = -1;
  78. rank[i] = 0;
  79. if(eC[m] < eC[i]) m = i;
  80. }
  81. eC[m] *= -1;
  82. sort(e, e + M, cmp);
  83. int sum = 0;
  84. used = 0;
  85. REP(i, M) sum += DFU(e[i]);
  86. if(used == N-1) printf("%d\n", sum);
  87. else printf("disconnected\n");
  88. }
  89. return 0;
  90. }
  91.  

Diff to submission s1207

spider.cpp

--- c4.s1207.cteam002.spider.cpp.0.spider.cpp
+++ c4.s1226.cteam002.spider.cpp.0.spider.cpp
@@ -28,14 +28,14 @@
 //////////////////////////////////
 
-#define MAXN 2222
-#define MAXM 1111111
+#define MAXN 1111111
 int N, M;
 //vector<int> graph[MAXN], cost[MAXN];
-int eA[MAXM], eB[MAXM], eC[MAXM], e[MAXM];
+int eA[MAXN], eB[MAXN], eC[MAXN], e[MAXN];
 
 int father[MAXN], rank[MAXN];
 
 int root(int v){
-  return father[v] == -1? v : father[v] = root(father[v]);
+  if(father[v] == -1) return v;
+  return (father[v] = root(father[v]));
 }