fork download
  1. #pragma GCC optimize ("Ofast")
  2. #include<bits/stdc++.h>
  3. using namespace std;
  4. void *wmem;
  5. char memarr[96000000];
  6. template<class T> inline void walloc1d(T **arr, int x, void **mem = &wmem){
  7. static int skip[16] = {0, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1};
  8. (*mem) = (void*)( ((char*)(*mem)) + skip[((unsigned long long)(*mem)) & 15] );
  9. (*arr)=(T*)(*mem);
  10. (*mem)=((*arr)+x);
  11. }
  12. struct unionFind{
  13. int *d;
  14. int N;
  15. int M;
  16. inline void malloc(const int n){
  17. d = (int*)std::malloc(n*sizeof(int));
  18. M = n;
  19. }
  20. inline void free(void){
  21. std::free(d);
  22. }
  23. inline void walloc(const int n, void **mem=&wmem){
  24. walloc1d(&d, n, mem);
  25. M = n;
  26. }
  27. inline void init(const int n){
  28. int i;
  29. N = n;
  30. for(i=(0);i<(n);i++){
  31. d[i] = -1;
  32. }
  33. }
  34. inline void init(void){
  35. init(M);
  36. }
  37. inline int get(int a){
  38. int t = a;
  39. int k;
  40. while(d[t]>=0){
  41. t=d[t];
  42. }
  43. while(d[a]>=0){
  44. k=d[a];
  45. d[a]=t;
  46. a=k;
  47. }
  48. return a;
  49. }
  50. inline int connect(int a, int b){
  51. if(d[a]>=0){
  52. a=get(a);
  53. }
  54. if(d[b]>=0){
  55. b=get(b);
  56. }
  57. if(a==b){
  58. return 0;
  59. }
  60. if(d[a] < d[b]){
  61. d[a] += d[b];
  62. d[b] = a;
  63. }
  64. else{
  65. d[b] += d[a];
  66. d[a] = b;
  67. }
  68. return 1;
  69. }
  70. inline int operator()(int a){
  71. return get(a);
  72. }
  73. inline int operator()(int a, int b){
  74. return connect(a,b);
  75. }
  76. inline int& operator[](const int a){
  77. return d[a];
  78. }
  79. inline int size(int a){
  80. a = get(a);
  81. return -d[a];
  82. }
  83. inline int sizeList(int res[]){
  84. int i;
  85. int sz=0;
  86. for(i=(0);i<(N);i++){
  87. if(d[i]<0){
  88. res[sz++] = -d[i];
  89. }
  90. }
  91. return sz;
  92. }
  93. }
  94. ;
  95. #define main dummy_main
  96. int main(){
  97. wmem = memarr;
  98. return 0;
  99. }
  100. #undef main
  101. class Solution{
  102. public:
  103. int makeConnected(int n, vector<vector<int>>& e){
  104. int i;
  105. dummy_main();
  106. int res = n - 1;
  107. unionFind uf;
  108. if(e.size() < n-1){
  109. return -1;
  110. }
  111. uf.walloc(n);
  112. uf.init(n);
  113. for(i=(0);i<(e.size());i++){
  114. res -= uf(e[i][0], e[i][1]);
  115. }
  116. return res;
  117. }
  118. }
  119. ;
  120. // cLay varsion 20200119-1
  121.  
  122. // --- original code ---
  123. // #define main dummy_main
  124. // {}
  125. // #undef main
  126. //
  127. // class Solution {
  128. // public:
  129. // int makeConnected(int n, vector<vector<int>>& e) {
  130. // dummy_main();
  131. // int res = n - 1;
  132. // unionFind uf;
  133. // if(e.size() < n-1) return -1;
  134. // uf.walloc(n);
  135. // uf.init(n);
  136. // rep(i, e.size()) res -= uf(e[i][0], e[i][1]);
  137. // return res;
  138. // }
  139. // };
  140.  
Compilation error #stdin compilation error #stdout 0s 0KB
stdin
Standard input is empty
compilation info
/usr/bin/ld: /usr/lib/gcc/x86_64-linux-gnu/8/../../../x86_64-linux-gnu/Scrt1.o: in function `_start':
(.text+0x20): undefined reference to `main'
collect2: error: ld returned 1 exit status
stdout
Standard output is empty