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. template<class S> void arrInsert(const int k, int &sz, S a[], const S aval){
  13. int i;
  14. sz++;
  15. for(i=sz-1;i>k;i--){
  16. a[i] = a[i-1];
  17. }
  18. a[k] = aval;
  19. }
  20. template<class S, class T> void arrInsert(const int k, int &sz, S a[], const S aval, T b[], const T bval){
  21. int i;
  22. sz++;
  23. for(i=sz-1;i>k;i--){
  24. a[i] = a[i-1];
  25. }
  26. for(i=sz-1;i>k;i--){
  27. b[i] = b[i-1];
  28. }
  29. a[k] = aval;
  30. b[k] = bval;
  31. }
  32. template<class S, class T, class U> void arrInsert(const int k, int &sz, S a[], const S aval, T b[], const T bval, U c[], const U cval){
  33. int i;
  34. sz++;
  35. for(i=sz-1;i>k;i--){
  36. a[i] = a[i-1];
  37. }
  38. for(i=sz-1;i>k;i--){
  39. b[i] = b[i-1];
  40. }
  41. for(i=sz-1;i>k;i--){
  42. c[i] = c[i-1];
  43. }
  44. a[k] = aval;
  45. b[k] = bval;
  46. c[k] = cval;
  47. }
  48. struct graph{
  49. int N;
  50. int *es;
  51. int **edge;
  52. void setDirectEdge(int N__, int M, int A[], int B[], void **mem = &wmem){
  53. int i;
  54. N = N__;
  55. walloc1d(&es, N, mem);
  56. walloc1d(&edge, N, mem);
  57. walloc1d(&edge[0], M, mem);
  58. for(i=(0);i<(N);i++){
  59. es[i] = 0;
  60. }
  61. for(i=(0);i<(M);i++){
  62. es[A[i]]++;
  63. }
  64. for(i=(0);i<(N);i++){
  65. walloc1d(&edge[i], es[i], mem);
  66. }
  67. for(i=(0);i<(N);i++){
  68. es[i] = 0;
  69. }
  70. for(i=(0);i<(M);i++){
  71. edge[A[i]][es[A[i]]++] = B[i];
  72. }
  73. }
  74. }
  75. ;
  76. #define main dummy_main
  77. int main(){
  78. wmem = memarr;
  79. return 0;
  80. }
  81. #undef main
  82. map<string,int> mp;
  83. string node[200000];
  84. int N;
  85. int M;
  86. int A[200000];
  87. int B[200000];
  88. int vis[200000];
  89. int getNode(string s){
  90. if(mp.count(s)){
  91. return mp[s];
  92. }
  93. node[N] = s;
  94. mp[s] = N;
  95. return N++;
  96. }
  97. class Solution{
  98. public:
  99. string findSmallestRegion(vector<vector<string>>& regions, string region1, string region2){
  100. int i;
  101. int a;
  102. int b;
  103. int x;
  104. int y;
  105. graph g;
  106. dummy_main();
  107. N = M = 0;
  108. mp.clear();
  109. for(i=(0);i<(regions.size());i++){
  110. int j;
  111. a = getNode(regions[i][0]);
  112. for(j=(1);j<(regions[i].size());j++){
  113. b = getNode(regions[i][j]);
  114. arrInsert(M,M,A,b,B,a);
  115. }
  116. }
  117. x = getNode(region1);
  118. y = getNode(region2);
  119. g.setDirectEdge(N,M,A,B);
  120. for(i=(0);i<(N);i++){
  121. vis[i] = 0;
  122. }
  123. a = x;
  124. for(;;){
  125. vis[a] = 1;
  126. if(g.es[a]==0){
  127. break;
  128. }
  129. a = g.edge[a][0];
  130. }
  131. b = y;
  132. for(;;){
  133. if(vis[b]){
  134. break;
  135. }
  136. b = g.edge[b][0];
  137. }
  138. return node[b];
  139. }
  140. }
  141. ;
  142. // cLay varsion 20191123-1
  143.  
  144. // --- original code ---
  145. // #define main dummy_main
  146. // {}
  147. // #undef main
  148. //
  149. // map<string,int> mp;
  150. // string node[2d5];
  151. // int N, M, A[2d5], B[2d5];
  152. // int vis[2d5];
  153. //
  154. // int getNode(string s){
  155. // if(mp.count(s)) return mp[s];
  156. // node[N] = s;
  157. // mp[s] = N;
  158. // return N++;
  159. // }
  160. //
  161. // class Solution {
  162. // public:
  163. // string findSmallestRegion(vector<vector<string>>& regions, string region1, string region2) {
  164. // int a, b, x, y;
  165. // graph g;
  166. // dummy_main();
  167. //
  168. // N = M = 0;
  169. // mp.clear();
  170. // rep(i,regions.size()){
  171. // a = getNode(regions[i][0]);
  172. // rep(j,1,regions[i].size()){
  173. // b = getNode(regions[i][j]);
  174. // arrInsert(M,M,A,b,B,a);
  175. // }
  176. // }
  177. // x = getNode(region1);
  178. // y = getNode(region2);
  179. //
  180. // g.setDirectEdge(N,M,A,B);
  181. // rep(i,N) vis[i] = 0;
  182. // a = x;
  183. // for(;;){
  184. // vis[a] = 1;
  185. // if(g.es[a]==0) break;
  186. // a = g.edge[a][0];
  187. // }
  188. // b = y;
  189. // for(;;){
  190. // if(vis[b]) break;
  191. // b = g.edge[b][0];
  192. // }
  193. // return node[b];
  194. // }
  195. // };
  196.  
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