fork download
  1. #pragma GCC optimize("Ofast")
  2. #pragma GCC optimize("unroll-loops")
  3. #pragma GCC optimize("inline")
  4. #include<bits/stdc++.h>
  5. using namespace std;
  6. void*wmem;
  7. char memarr[96000000];
  8. template<class T> inline void walloc1d(T **arr, int x, void **mem = &wmem){
  9. static int skip[16] = {0, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1};
  10. (*mem) = (void*)( ((char*)(*mem)) + skip[((unsigned long long)(*mem)) & 15] );
  11. (*arr)=(T*)(*mem);
  12. (*mem)=((*arr)+x);
  13. }
  14. template<class T> inline void walloc1d(T **arr, int x1, int x2, void **mem = &wmem){
  15. walloc1d(arr, x2-x1, mem);
  16. (*arr) -= x1;
  17. }
  18. template<class T, class S> inline T RoundDown(T a, S b){
  19. T m;
  20. if(b < 0){
  21. b = -b;
  22. }
  23. if(b <= 1){
  24. return a;
  25. }
  26. m = a % b;
  27. if(m == 0){
  28. return a;
  29. }
  30. if(m < 0){
  31. m += b;
  32. }
  33. return ((a - m) / b) * b;
  34. }
  35. template<class S, class T> inline S chmax(S &a, T b){
  36. if(a<b){
  37. a=b;
  38. }
  39. return a;
  40. }
  41. struct graph{
  42. int N;
  43. int*es;
  44. int**edge;
  45. void setEdge(int N__, int M, int A[], int B[], void **mem = &wmem){
  46. int i;
  47. N = N__;
  48. walloc1d(&es, N, mem);
  49. walloc1d(&edge, N, mem);
  50. for(i=(0);i<(N);i++){
  51. es[i] = 0;
  52. }
  53. for(i=(0);i<(M);i++){
  54. es[A[i]]++;
  55. es[B[i]]++;
  56. }
  57. for(i=(0);i<(N);i++){
  58. walloc1d(&edge[i], es[i], mem);
  59. }
  60. for(i=(0);i<(N);i++){
  61. es[i] = 0;
  62. }
  63. for(i=(0);i<(M);i++){
  64. edge[A[i]][es[A[i]]++] = B[i];
  65. edge[B[i]][es[B[i]]++] = A[i];
  66. }
  67. }
  68. void getDist(int root, int res[], void *mem = wmem){
  69. int i;
  70. int j;
  71. int k;
  72. int*q;
  73. int s;
  74. int z;
  75. walloc1d(&q, N, &mem);
  76. for(i=(0);i<(N);i++){
  77. res[i]=-1;
  78. }
  79. res[root]=0;
  80. s=0;
  81. z=1;
  82. q[0]=root;
  83. while(z){
  84. i=q[s++];
  85. z--;
  86. for(j=(0);j<(es[i]);j++){
  87. k=edge[i][j];
  88. if(res[k]>=0){
  89. continue;
  90. }
  91. res[k]=res[i]+1;
  92. q[s+z++]=k;
  93. }
  94. }
  95. }
  96. int getDist(int a, int b, void *mem = wmem){
  97. int i;
  98. int j;
  99. int k;
  100. int*q;
  101. int s;
  102. int z;
  103. int*d;
  104. if(a==b){
  105. return 0;
  106. }
  107. walloc1d(&d, N, &mem);
  108. walloc1d(&q, N, &mem);
  109. for(i=(0);i<(N);i++){
  110. d[i] = -1;
  111. }
  112. d[a] = 0;
  113. s = 0;
  114. z = 1;
  115. q[0] = a;
  116. while(z){
  117. i = q[s++];
  118. z--;
  119. for(j=(0);j<(es[i]);j++){
  120. k = edge[i][j];
  121. if(d[k] >= 0){
  122. continue;
  123. }
  124. d[k] = d[i] + 1;
  125. if(k==b){
  126. return d[k];
  127. }
  128. q[s+z++] = k;
  129. }
  130. }
  131. return -1;
  132. }
  133. }
  134. ;
  135. template<class T, class S> inline int vec2arr(vector<T> &v, S arr[]){
  136. int i;
  137. int N = v.size();
  138. for(i=(0);i<(N);i++){
  139. arr[i] = v[i];
  140. }
  141. return N;
  142. }
  143. template<class T, class S1, class S2> inline int vec2arr(vector<vector<T>> &v, S1 arr1[], S2 arr2[]){
  144. int i;
  145. int N = v.size();
  146. for(i=(0);i<(N);i++){
  147. arr1[i] = v[i][0];
  148. arr2[i] = v[i][1];
  149. }
  150. return N;
  151. }
  152. template<class T, class S1, class S2, class S3> inline int vec2arr(vector<vector<T>> &v, S1 arr1[], S2 arr2[], S3 arr3[]){
  153. int i;
  154. int N = v.size();
  155. for(i=(0);i<(N);i++){
  156. arr1[i] = v[i][0];
  157. arr2[i] = v[i][1];
  158. arr3[i] = v[i][2];
  159. }
  160. return N;
  161. }
  162. #define main dummy_main
  163. int main(){
  164. wmem = memarr;
  165. return 0;
  166. }
  167. #undef main
  168. int N;
  169. int M;
  170. int A[100000];
  171. int B[100000];
  172. int P[100000];
  173. int dist[100000];
  174. graph g;
  175. class Solution{
  176. public:
  177. int networkBecomesIdle(vector<vector<int>>& edges, vector<int>& patience){
  178. int i;
  179. dummy_main();
  180. int res = -1;
  181. int f;
  182. N = vec2arr(patience, P);
  183. M = vec2arr(edges, A, B);
  184. g.setEdge(N,M,A,B);
  185. g.getDist(0,dist);
  186. for(i=(1);i<(N);i++){
  187. f = 2 * dist[i];
  188. chmax(res, f + RoundDown(f-1, P[i]));
  189. }
  190. return res+1;
  191. }
  192. }
  193. ;
  194. // cLay version 20210926-1
  195.  
  196. // --- original code ---
  197. // #define main dummy_main
  198. // {}
  199. // #undef main
  200. //
  201. // int N, M, A[1d5], B[], P[], dist[];
  202. // graph g;
  203. //
  204. // class Solution {
  205. // public:
  206. // int networkBecomesIdle(vector<vector<int>>& edges, vector<int>& patience) {
  207. // dummy_main();
  208. // int res = -1, f;
  209. // N = vec2arr(patience, P);
  210. // M = vec2arr(edges, A, B);
  211. // g.setEdge(N,M,A,B);
  212. // g.getDist(0,dist);
  213. // rep(i,1,N){
  214. // f = 2 * dist[i];
  215. // res >?= f + RoundDown(f-1, P[i]);
  216. // }
  217. // return res+1;
  218. // }
  219. // };
  220.  
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