#include<cstdio> #include<algorithm> #include<vector> #include<iostream> #include<stack> #include<bitset> #define S 100007 using namespace std; typedef long long ll; ll T[S]; ll depth[S]; vector < pair < int , ll > > V[S]; int roz[S]; int R[S][20]; int lca(int x, int y){ if(depth[y] > depth[x]) swap(x,y); for(int i = 19; i >= 0;i--){ if(depth[R[x][i]] >= depth[y]) x = R[x][i]; } if(x == y) return x; for(int i = 19; i >= 0;i--){ if(R[x][i] != R[y][i]){ x = R[x][i]; y = R[y][i]; } } return R[x][0]; } ll dist(int x, int y){ int p = lca(x,y); return depth[x] + depth[y] - 2*depth[p]; } void DFS(int x, int r){ R[x][0] = r; for(int i = 1; i <= 19;i++){ R[x][i] = R[R[x][i-1]][i-1]; } roz[x] = 1; for(int i = 0; i < V[x].size();i++){ int v = V[x][i].first; if(v != r){ depth[v] = depth[x] + V[x][i].second; DFS(v,x); roz[x] += roz[v]; } } } int P[S]; bool deleted[S]; int centroid(int x){ for(int i = 0; i < V[x].size();i++){ int v = V[x][i].first; if(!deleted[v] && roz[v] > roz[x]/2){ roz[x] -= roz[v]; roz[v] += roz[x]; return centroid(v); } } return x; } int decomposition(int x){ int c = centroid(x); deleted[c] = 1; for(int i = 0; i < V[c].size();i++){ int v = V[c][i].first; if(!deleted[v]){ int p = decomposition(v); P[p] = c; } } return c; } vector < pair < ll, int > > D[S]; vector < pair < ll, int > > D2[S]; vector < vector < int > > K; vector < vector < int > > K2; vector < vector < int > > K3; vector < bool > vis; stack < int > Stos; vector < int > C; void DFS2(int x){ vis[x] = 1; for(int i = 0; i < K[x].size();i++){ int v = K[x][i]; if(!vis[v]) DFS2(v); } Stos.push(x); } void DFS3(int x, int c){ C[x] = c; for(int i = 0; i < K2[x].size();i++){ int v = K2[x][i]; if(C[v] == 0){ DFS3(v,c); }else{ K3[C[v]].push_back(c); } } } vector < bitset < S > > bity; int main(void){ int n; scanf("%d",&n); for(int i = 1; i <= n;i++){ scanf("%lld",&T[i]); } for(int i = 1; i < n;i++){ int a,b; ll c; scanf("%d %d %lld",&a,&b,&c); V[a].push_back({b,c}); V[b].push_back({a,c}); } DFS(1,1); for(int i = 2; i <= n;i++){ P[i] = R[i][0]; } //int root = decomposition(1); for(int i = 1; i <= n;i++){ int b = i; while(b != 0){ D[b].push_back({dist(i,b),i}); b = P[b]; } } K.resize(n+3); K2.resize(n+3); int id = n; for(int i = 1; i <= n;i++){ sort(D[i].begin(),D[i].end()); for(int j = 0; j < D[i].size();j++){ id++; K.push_back(vector<int>()); K2.push_back(vector<int>()); if(j != 0){ K[id].push_back(id-1); K2[id-1].push_back(id); } K[id].push_back(D[i][j].second); K2[D[i][j].second].push_back(id); D2[i].push_back({D[i][j].first,id}); } } for(int i = 1; i <= n;i++){ int b = i; while(b != 0){ ll d = T[i] - dist(i,b); if(d < 0){ b = P[b]; continue; } pair < ll, int > pa = {d,1e9}; auto x = lower_bound(D2[b].begin(),D2[b].end(),pa); if(x == D2[b].end()){ K[i].push_back(D2[b].back().second); K2[D2[b].back().second].push_back(i); }else{ x = prev(x); K[i].push_back((*x).second); K2[(*x).second].push_back(i); } b = P[b]; } } K3.resize(id+3); vis.resize(id+3); C.resize(id+3); for(int i = 1; i <= id;i++){ if(!vis[i]){ DFS2(i); } } int id2 = 0; while(!Stos.empty()){ int x = Stos.top(); Stos.pop(); if(!C[x]){ id2++; DFS3(x,id2); } } bity.resize(id+3); for(int i = 1; i <= n;i++){ bity[C[i]].set(i,1); } for(int i = id2; i >= 1;i--){ for(int j = 0; j < K3[i].size();j++){ int v = K3[i][j]; if(i != v) bity[i] |= bity[v]; } } for(int i = 1; i <= n;i++){ printf("%d ",bity[C[i]].count()); } return 0; } /* 200 89706075587 30754619649 53679010083 11006026892 32299249501 62579806910 48724268812 44383969095 57632610429 54253031020 78539864257 49560125381 71951852656 77316328802 26467914927 77000901624 34717647472 78604181131 32413115172 55832889807 51226345032 76221348969 30403386570 32606310064 54973694930 33186314996 18707456041 69988918791 32099970968 73082012680 81321864070 79133144964 25413081976 17201346164 27249987103 45657764435 80270987991 79463660911 22630429000 91814124785 48081644576 40210154719 88620571077 46206270553 74699727930 33269937994 11481330243 98922756617 36978734362 45212868362 60442058840 73113548515 31295776162 68692135072 49077314749 12131130719 50302479885 73919936599 29020710164 53232730808 35117043163 61052139562 50190045957 94275883017 40007288874 74313863378 87690441049 27352530092 99682773567 55530515303 27722463139 40562955643 24820877491 60736397489 96805924873 99893100016 99529408579 92213895066 54631587328 69324563660 39597462450 96074564728 87651265267 72383916200 35620757374 29948488979 96388705960 65745196387 91708975491 20643493674 61307402146 95602920121 23730767834 32698325338 19859164228 99189049024 26443844743 23606696975 92344899582 86649257952 93100402107 91645954461 52828401848 94432044400 16530227796 63885718921 85985826937 87128323365 97541419494 73246694645 41618417287 28621988639 69969935279 99745518437 59632480809 94271303109 35200048883 19794817075 61948124647 39217339310 30799888097 28062030848 58250060642 92021647439 60091122738 21742958055 58897147360 41567937115 13330589088 37185450262 60197961034 59881617833 68850656199 68145313743 27019678128 50922210471 55607972157 86335579435 23599503347 95396989239 80276867617 89994278232 31747801884 14400233215 27930273905 89194658811 21717304364 58006643367 27100963299 11532485560 65123073170 28731271625 96647354382 19863867064 71896178229 34889622966 42393348701 80930539458 98182163579 10803910803 67374707884 16973381127 93281198993 46868628861 22127886809 42871875269 30639262393 74905729927 94985225279 96935156848 25428382956 90672109584 35659261488 70296066865 46659576389 78118164159 65653588591 60417378168 40505701889 49151962636 25315672455 54435621201 87610827991 61348178622 94948036526 63698869564 35934276546 58603976571 76874356349 70075426418 85971942015 99209442414 25300198926 59225096188 49950963246 87665267441 41314304368 39404368837 47389217059 45690214192 1 2 84722245617 1 3 66930407668 3 4 87592478635 3 5 59419305289 3 6 64718993075 4 7 57374401112 6 8 41415935165 4 9 70102126418 2 10 19393290367 8 11 63589436539 1 12 77837738968 5 13 57794533378 13 14 83269107678 6 15 70326093680 13 16 93517770163 14 17 89723268912 11 18 77027053730 9 19 98882506205 19 20 99803347256 13 21 24028117551 11 22 28657113852 12 23 6408434811 1 24 34133447699 17 25 9038709789 2 26 67302122038 19 27 85475560885 27 28 68371414117 11 29 97109023056 7 30 34543209895 27 31 53298812247 12 32 10281677163 14 33 8749075654 22 34 74570793567 29 35 98854813251 10 36 72714848162 12 37 74710275106 11 38 51178404912 4 39 58021562861 38 40 42024754366 36 41 34052629502 11 42 82152444387 19 43 7521509978 25 44 25209709827 37 45 97628256288 11 46 31768243714 39 47 53516461742 10 48 97929483477 5 49 17245194589 44 50 36256936370 12 51 79935445111 12 52 42666797585 48 53 32078147823 20 54 82741270866 48 55 44244796749 45 56 33673875047 45 57 33841768491 46 58 28166548823 39 59 81297581828 10 60 62981466346 52 61 60737177425 5 62 21924661297 11 63 99151586731 49 64 92672782289 46 65 26119189262 30 66 77217526447 13 67 39646060432 8 68 5271504489 12 69 39376050994 63 70 27464297226 70 71 14581814140 28 72 80847820232 39 73 93710456198 64 74 66336411673 25 75 20892564607 29 76 9742521347 68 77 97333616547 58 78 34107990352 67 79 10147409300 1 80 2307559420 75 81 20434151082 49 82 17704337882 13 83 17943972240 77 84 67660666932 56 85 91168414045 83 86 8816807582 72 87 40768920487 1 88 57963943616 2 89 69734993472 11 90 77551564230 56 91 18058777123 56 92 59729442770 82 93 21645541622 89 94 20375118151 65 95 20978064054 73 96 60689177005 81 97 56475707941 76 98 99890041218 33 99 81481016158 27 100 79143854495 98 101 6757221471 95 102 94283490632 89 103 2517270304 32 104 27281068966 15 105 78427337076 20 106 12228632466 91 107 92765496329 87 108 59593099097 30 109 63162533453 90 110 9485345076 102 111 10914978714 13 112 53209420617 71 113 14827261709 75 114 39335882693 3 115 79150074634 113 116 88324030535 73 117 99070622369 31 118 84392509464 59 119 37188692242 2 120 16110345008 108 121 7819855455 119 122 51294838856 85 123 37316547265 6 124 47234725602 39 125 91286572539 99 126 34307897990 56 127 41260380473 123 128 67704990532 44 129 39332809372 53 130 54565413830 11 131 89098789025 97 132 33980076477 11 133 27940602644 15 134 76417217509 8 135 31287609294 2 136 50838679504 71 137 23988293733 29 138 56725376398 113 139 74862347559 139 140 32048046652 63 141 74721324839 131 142 1401668214 64 143 51831610985 118 144 83059472048 32 145 90433881303 138 146 18588228570 46 147 70467560399 14 148 42488163536 41 149 74390883755 136 150 52722926872 81 151 74662419443 149 152 63111146126 67 153 72036510794 77 154 17030970589 10 155 36809241710 150 156 60980800237 1 157 25749303842 82 158 25556810629 92 159 82162511387 54 160 62324142580 55 161 10747086299 151 162 88748045010 14 163 79700994211 5 164 91294073624 91 165 36272800257 46 166 83420491064 82 167 92907999698 145 168 36889912653 4 169 97223924142 152 170 90792205896 111 171 28199614358 48 172 75468899627 104 173 35079846981 112 174 8566458798 55 175 15274003028 76 176 95056562408 166 177 54137056786 154 178 65948171929 84 179 53741239025 131 180 57981356659 2 181 52049060719 129 182 69690474819 123 183 21904880767 74 184 79328680664 11 185 1184211504 80 186 10351415087 129 187 67836745817 137 188 64791398037 45 189 41820809614 91 190 2996137841 137 191 18631512101 60 192 41706580075 162 193 69448830929 58 194 43113770449 119 195 30163775526 24 196 29164486462 140 197 88519782100 182 198 92329854129 145 199 25156305947 19 200 13712906638 */
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 | #include<cstdio> #include<algorithm> #include<vector> #include<iostream> #include<stack> #include<bitset> #define S 100007 using namespace std; typedef long long ll; ll T[S]; ll depth[S]; vector < pair < int , ll > > V[S]; int roz[S]; int R[S][20]; int lca(int x, int y){ if(depth[y] > depth[x]) swap(x,y); for(int i = 19; i >= 0;i--){ if(depth[R[x][i]] >= depth[y]) x = R[x][i]; } if(x == y) return x; for(int i = 19; i >= 0;i--){ if(R[x][i] != R[y][i]){ x = R[x][i]; y = R[y][i]; } } return R[x][0]; } ll dist(int x, int y){ int p = lca(x,y); return depth[x] + depth[y] - 2*depth[p]; } void DFS(int x, int r){ R[x][0] = r; for(int i = 1; i <= 19;i++){ R[x][i] = R[R[x][i-1]][i-1]; } roz[x] = 1; for(int i = 0; i < V[x].size();i++){ int v = V[x][i].first; if(v != r){ depth[v] = depth[x] + V[x][i].second; DFS(v,x); roz[x] += roz[v]; } } } int P[S]; bool deleted[S]; int centroid(int x){ for(int i = 0; i < V[x].size();i++){ int v = V[x][i].first; if(!deleted[v] && roz[v] > roz[x]/2){ roz[x] -= roz[v]; roz[v] += roz[x]; return centroid(v); } } return x; } int decomposition(int x){ int c = centroid(x); deleted[c] = 1; for(int i = 0; i < V[c].size();i++){ int v = V[c][i].first; if(!deleted[v]){ int p = decomposition(v); P[p] = c; } } return c; } vector < pair < ll, int > > D[S]; vector < pair < ll, int > > D2[S]; vector < vector < int > > K; vector < vector < int > > K2; vector < vector < int > > K3; vector < bool > vis; stack < int > Stos; vector < int > C; void DFS2(int x){ vis[x] = 1; for(int i = 0; i < K[x].size();i++){ int v = K[x][i]; if(!vis[v]) DFS2(v); } Stos.push(x); } void DFS3(int x, int c){ C[x] = c; for(int i = 0; i < K2[x].size();i++){ int v = K2[x][i]; if(C[v] == 0){ DFS3(v,c); }else{ K3[C[v]].push_back(c); } } } vector < bitset < S > > bity; int main(void){ int n; scanf("%d",&n); for(int i = 1; i <= n;i++){ scanf("%lld",&T[i]); } for(int i = 1; i < n;i++){ int a,b; ll c; scanf("%d %d %lld",&a,&b,&c); V[a].push_back({b,c}); V[b].push_back({a,c}); } DFS(1,1); for(int i = 2; i <= n;i++){ P[i] = R[i][0]; } //int root = decomposition(1); for(int i = 1; i <= n;i++){ int b = i; while(b != 0){ D[b].push_back({dist(i,b),i}); b = P[b]; } } K.resize(n+3); K2.resize(n+3); int id = n; for(int i = 1; i <= n;i++){ sort(D[i].begin(),D[i].end()); for(int j = 0; j < D[i].size();j++){ id++; K.push_back(vector<int>()); K2.push_back(vector<int>()); if(j != 0){ K[id].push_back(id-1); K2[id-1].push_back(id); } K[id].push_back(D[i][j].second); K2[D[i][j].second].push_back(id); D2[i].push_back({D[i][j].first,id}); } } for(int i = 1; i <= n;i++){ int b = i; while(b != 0){ ll d = T[i] - dist(i,b); if(d < 0){ b = P[b]; continue; } pair < ll, int > pa = {d,1e9}; auto x = lower_bound(D2[b].begin(),D2[b].end(),pa); if(x == D2[b].end()){ K[i].push_back(D2[b].back().second); K2[D2[b].back().second].push_back(i); }else{ x = prev(x); K[i].push_back((*x).second); K2[(*x).second].push_back(i); } b = P[b]; } } K3.resize(id+3); vis.resize(id+3); C.resize(id+3); for(int i = 1; i <= id;i++){ if(!vis[i]){ DFS2(i); } } int id2 = 0; while(!Stos.empty()){ int x = Stos.top(); Stos.pop(); if(!C[x]){ id2++; DFS3(x,id2); } } bity.resize(id+3); for(int i = 1; i <= n;i++){ bity[C[i]].set(i,1); } for(int i = id2; i >= 1;i--){ for(int j = 0; j < K3[i].size();j++){ int v = K3[i][j]; if(i != v) bity[i] |= bity[v]; } } for(int i = 1; i <= n;i++){ printf("%d ",bity[C[i]].count()); } return 0; } /* 200 89706075587 30754619649 53679010083 11006026892 32299249501 62579806910 48724268812 44383969095 57632610429 54253031020 78539864257 49560125381 71951852656 77316328802 26467914927 77000901624 34717647472 78604181131 32413115172 55832889807 51226345032 76221348969 30403386570 32606310064 54973694930 33186314996 18707456041 69988918791 32099970968 73082012680 81321864070 79133144964 25413081976 17201346164 27249987103 45657764435 80270987991 79463660911 22630429000 91814124785 48081644576 40210154719 88620571077 46206270553 74699727930 33269937994 11481330243 98922756617 36978734362 45212868362 60442058840 73113548515 31295776162 68692135072 49077314749 12131130719 50302479885 73919936599 29020710164 53232730808 35117043163 61052139562 50190045957 94275883017 40007288874 74313863378 87690441049 27352530092 99682773567 55530515303 27722463139 40562955643 24820877491 60736397489 96805924873 99893100016 99529408579 92213895066 54631587328 69324563660 39597462450 96074564728 87651265267 72383916200 35620757374 29948488979 96388705960 65745196387 91708975491 20643493674 61307402146 95602920121 23730767834 32698325338 19859164228 99189049024 26443844743 23606696975 92344899582 86649257952 93100402107 91645954461 52828401848 94432044400 16530227796 63885718921 85985826937 87128323365 97541419494 73246694645 41618417287 28621988639 69969935279 99745518437 59632480809 94271303109 35200048883 19794817075 61948124647 39217339310 30799888097 28062030848 58250060642 92021647439 60091122738 21742958055 58897147360 41567937115 13330589088 37185450262 60197961034 59881617833 68850656199 68145313743 27019678128 50922210471 55607972157 86335579435 23599503347 95396989239 80276867617 89994278232 31747801884 14400233215 27930273905 89194658811 21717304364 58006643367 27100963299 11532485560 65123073170 28731271625 96647354382 19863867064 71896178229 34889622966 42393348701 80930539458 98182163579 10803910803 67374707884 16973381127 93281198993 46868628861 22127886809 42871875269 30639262393 74905729927 94985225279 96935156848 25428382956 90672109584 35659261488 70296066865 46659576389 78118164159 65653588591 60417378168 40505701889 49151962636 25315672455 54435621201 87610827991 61348178622 94948036526 63698869564 35934276546 58603976571 76874356349 70075426418 85971942015 99209442414 25300198926 59225096188 49950963246 87665267441 41314304368 39404368837 47389217059 45690214192 1 2 84722245617 1 3 66930407668 3 4 87592478635 3 5 59419305289 3 6 64718993075 4 7 57374401112 6 8 41415935165 4 9 70102126418 2 10 19393290367 8 11 63589436539 1 12 77837738968 5 13 57794533378 13 14 83269107678 6 15 70326093680 13 16 93517770163 14 17 89723268912 11 18 77027053730 9 19 98882506205 19 20 99803347256 13 21 24028117551 11 22 28657113852 12 23 6408434811 1 24 34133447699 17 25 9038709789 2 26 67302122038 19 27 85475560885 27 28 68371414117 11 29 97109023056 7 30 34543209895 27 31 53298812247 12 32 10281677163 14 33 8749075654 22 34 74570793567 29 35 98854813251 10 36 72714848162 12 37 74710275106 11 38 51178404912 4 39 58021562861 38 40 42024754366 36 41 34052629502 11 42 82152444387 19 43 7521509978 25 44 25209709827 37 45 97628256288 11 46 31768243714 39 47 53516461742 10 48 97929483477 5 49 17245194589 44 50 36256936370 12 51 79935445111 12 52 42666797585 48 53 32078147823 20 54 82741270866 48 55 44244796749 45 56 33673875047 45 57 33841768491 46 58 28166548823 39 59 81297581828 10 60 62981466346 52 61 60737177425 5 62 21924661297 11 63 99151586731 49 64 92672782289 46 65 26119189262 30 66 77217526447 13 67 39646060432 8 68 5271504489 12 69 39376050994 63 70 27464297226 70 71 14581814140 28 72 80847820232 39 73 93710456198 64 74 66336411673 25 75 20892564607 29 76 9742521347 68 77 97333616547 58 78 34107990352 67 79 10147409300 1 80 2307559420 75 81 20434151082 49 82 17704337882 13 83 17943972240 77 84 67660666932 56 85 91168414045 83 86 8816807582 72 87 40768920487 1 88 57963943616 2 89 69734993472 11 90 77551564230 56 91 18058777123 56 92 59729442770 82 93 21645541622 89 94 20375118151 65 95 20978064054 73 96 60689177005 81 97 56475707941 76 98 99890041218 33 99 81481016158 27 100 79143854495 98 101 6757221471 95 102 94283490632 89 103 2517270304 32 104 27281068966 15 105 78427337076 20 106 12228632466 91 107 92765496329 87 108 59593099097 30 109 63162533453 90 110 9485345076 102 111 10914978714 13 112 53209420617 71 113 14827261709 75 114 39335882693 3 115 79150074634 113 116 88324030535 73 117 99070622369 31 118 84392509464 59 119 37188692242 2 120 16110345008 108 121 7819855455 119 122 51294838856 85 123 37316547265 6 124 47234725602 39 125 91286572539 99 126 34307897990 56 127 41260380473 123 128 67704990532 44 129 39332809372 53 130 54565413830 11 131 89098789025 97 132 33980076477 11 133 27940602644 15 134 76417217509 8 135 31287609294 2 136 50838679504 71 137 23988293733 29 138 56725376398 113 139 74862347559 139 140 32048046652 63 141 74721324839 131 142 1401668214 64 143 51831610985 118 144 83059472048 32 145 90433881303 138 146 18588228570 46 147 70467560399 14 148 42488163536 41 149 74390883755 136 150 52722926872 81 151 74662419443 149 152 63111146126 67 153 72036510794 77 154 17030970589 10 155 36809241710 150 156 60980800237 1 157 25749303842 82 158 25556810629 92 159 82162511387 54 160 62324142580 55 161 10747086299 151 162 88748045010 14 163 79700994211 5 164 91294073624 91 165 36272800257 46 166 83420491064 82 167 92907999698 145 168 36889912653 4 169 97223924142 152 170 90792205896 111 171 28199614358 48 172 75468899627 104 173 35079846981 112 174 8566458798 55 175 15274003028 76 176 95056562408 166 177 54137056786 154 178 65948171929 84 179 53741239025 131 180 57981356659 2 181 52049060719 129 182 69690474819 123 183 21904880767 74 184 79328680664 11 185 1184211504 80 186 10351415087 129 187 67836745817 137 188 64791398037 45 189 41820809614 91 190 2996137841 137 191 18631512101 60 192 41706580075 162 193 69448830929 58 194 43113770449 119 195 30163775526 24 196 29164486462 140 197 88519782100 182 198 92329854129 145 199 25156305947 19 200 13712906638 */ |