QOJ.ac
QOJ
ID | 题目 | 提交者 | 结果 | 用时 | 内存 | 语言 | 文件大小 | 提交时间 | 测评时间 |
---|---|---|---|---|---|---|---|---|---|
#601346 | #5418. Color the Tree | bruteforce_ | RE | 234ms | 81092kb | C++20 | 2.6kb | 2024-09-29 22:27:23 | 2024-09-29 22:27:24 |
Judging History
answer
#include<bits/stdc++.h>
#define int long long
using namespace std;
const int N=1e6+7,inf=1e18,S=21;
vector<vector<int>> e,leaf,fa,mi,pos;
vector<int> a,dep,dfn,_2;
int tot;
int n;
int query(int l,int r)
{
l++; r++;
int len=r-l+1;
int t=_2[len];
return min(mi[l][t],mi[r-(1<<t)+1][t]);
}
bool cmp(int x,int y)
{
return dfn[x]<dfn[y];
}
void dfs1(int u)
{
dep[u]=dep[fa[u][0]]+1;
leaf[dep[u]].push_back(u);
dfn[u]=++tot;
for(auto v:e[u])
{
if(v==fa[u][0]) continue;
fa[v][0]=u;
dfs1(v);
}
}
int lca(int x,int y)
{
if(dep[x]<dep[y])
swap(x,y);
for(int i=S-1; i>=0; i--)
{
if(dep[fa[x][0]]>=dep[y])
x=fa[x][0];
}
if(x==y) return x;
for(int i=S-1; i>=0; i--)
{
if(fa[x][0]!=fa[y][0])
{
x=fa[x][0];
y=fa[y][0];
}
}
return fa[x][0];
}
//vector<int> dp;
int dfs2(int u,int fa,int d)
{
if(dep[u]==d)
{
e[u].clear();
return query(0,d-1);
}
int res=0;
for(auto v:e[u])
{
if(v==fa) continue;
res+=dfs2(v,u,d);
}
e[u].clear();
return min(res,query(d-dep[u],d-dep[fa]-1));
}
int solve(int id)
{
if(!leaf[id].size()) return 0;
sort(leaf[id].begin(),leaf[id].end(),cmp);
int n=leaf[id].size();
for(int i=0; i<n-1; i++)
{
leaf[id].push_back(lca(leaf[id][i],leaf[id][i+1]));
}
sort(leaf[id].begin(),leaf[id].end(),cmp);
leaf[id].erase(unique(leaf[id].begin(),leaf[id].end()),leaf[id].end());
n=leaf[id].size();
for(int i=0; i<n-1; i++)
{
int l=lca(leaf[id][i],leaf[id][i+1]);
e[leaf[id][i+1]].push_back(l);
e[l].push_back(leaf[id][i+1]);
}
int res=dfs2(leaf[id][0],0,id);
return res;
}
void O_o()
{
cin>>n;
pos.assign(n+2,vector<int>(S,0));
mi.assign(n+2,vector<int>(S,inf));
_2.assign(n+2,0);
e.assign(n+1,vector<int>());
fa.assign(n+1,vector<int>(S,0));
leaf.assign(n+1,vector<int>());
a.assign(n+1,0);
_2[0]=-1;
for(int i=1; i<=n; i++)
{
cin>>a[i];
mi[i][0]=a[i];
pos[i][0]=i+1;
_2[i]=_2[i>>1]+1;
}
for(int j=1; j<S; j++)
{
for(int i=1; i<=n; i++)
{
pos[i][j]=pos[pos[i][j-1]][j-1];
mi[i][j]=min(mi[i][j-1],mi[pos[i][j-1]][j-1]);
}
}
for(int i=1; i<n; i++)
{
int x,y;
cin>>x>>y;
e[x].push_back(y);
e[y].push_back(x);
}
dep.assign(n+1,0);
dfn.assign(n+1,0);
tot=0;
dfs1(1);
for(int j=1; j<S; j++)
{
for(int i=1; i<=n; i++)
{
fa[i][j]=fa[fa[i][j-1]][j-1];
}
}
int ans=0;
e.assign(n+1,vector<int>());
for(int i=1; i<=n; i++)
{
ans+=solve(i);
}
cout<<ans<<"\n";
}
signed main()
{
ios::sync_with_stdio(false); cin.tie(0); cout.tie(0);
cout<<fixed<<setprecision(12);
int T=1;
cin>>T;
while(T--)
{
O_o();
}
}
詳細信息
Test #1:
score: 100
Accepted
time: 0ms
memory: 3820kb
input:
3 4 10 15 40 1 1 2 2 3 2 4 5 10 5 1 100 1000 1 2 2 3 2 4 4 5 4 1000 200 10 8 1 2 2 3 3 4
output:
35 17 1218
result:
ok 3 number(s): "35 17 1218"
Test #2:
score: 0
Accepted
time: 76ms
memory: 3696kb
input:
3000 54 43 44 11 49 17 14 7 30 35 12 34 14 15 8 29 47 30 31 39 17 26 23 26 45 34 50 49 13 35 18 29 15 13 44 47 5 22 20 19 46 30 22 26 13 47 46 43 27 48 48 13 14 30 44 1 2 1 3 2 4 3 5 4 6 2 7 4 8 1 9 3 10 1 11 8 12 2 13 9 14 1 15 1 16 15 17 15 18 7 19 1 20 19 21 13 22 10 23 17 24 9 25 9 26 24 27 8 28...
output:
180 168 222 230 156 240 225 126 100 81 155 73 154 127 149 124 228 230 132 187 153 170 78 282 195 286 191 211 119 197 211 233 88 252 239 233 173 180 195 121 109 148 180 175 226 210 182 97 199 59 56 31 115 204 203 172 139 208 53 140 189 170 173 137 233 94 163 273 80 350 156 133 146 159 240 269 137 222...
result:
ok 3000 numbers
Test #3:
score: 0
Accepted
time: 88ms
memory: 4348kb
input:
300 474 5 24 21 41 15 23 43 48 32 19 27 40 10 49 40 6 18 41 43 31 45 18 35 36 12 10 23 45 28 23 14 43 37 45 12 16 20 17 49 13 22 8 30 19 27 40 22 14 30 47 16 39 25 48 21 26 50 8 14 26 9 30 41 15 44 24 16 46 50 39 25 47 24 45 21 18 26 21 5 39 15 10 47 48 11 44 44 33 23 14 35 39 35 30 38 9 13 15 39 5 ...
output:
329 183 264 219 323 220 348 342 410 395 80 201 299 144 207 408 360 215 283 104 320 394 277 210 273 285 242 253 265 379 360 322 202 351 195 196 266 270 171 342 239 283 286 300 331 317 345 268 173 296 275 224 480 330 264 162 199 378 254 214 231 293 229 259 241 268 380 419 233 185 364 341 328 237 320 3...
result:
ok 300 numbers
Test #4:
score: 0
Accepted
time: 118ms
memory: 10728kb
input:
30 4926 18 13 47 7 21 39 28 48 21 44 14 18 39 13 46 33 6 49 9 7 10 29 29 25 38 15 16 42 41 41 40 14 26 13 6 19 17 31 24 18 30 24 48 46 38 21 28 42 29 50 33 28 18 26 18 42 13 23 35 20 32 6 17 25 44 46 35 36 50 24 7 29 34 14 41 41 8 33 22 46 7 6 22 40 24 8 44 36 38 13 37 37 25 22 7 43 50 33 19 44 24 4...
output:
427 520 443 359 427 408 371 415 482 436 269 530 478 485 435 453 418 503 443 453 405 425 347 564 297 435 559 453 213 395
result:
ok 30 numbers
Test #5:
score: 0
Accepted
time: 80ms
memory: 3652kb
input:
3000 74 555233197 518812085 998593787 821753058 967306600 663279435 696954042 885219300 489323226 146136486 447383587 785317885 838306349 708275482 715157265 298848995 400280904 374077023 673881523 207667786 885945020 459791675 992519779 327830583 821713695 253985403 926395863 419409783 138881726 80...
output:
6742611216 5794349776 3087356867 4707144715 2761702533 3246645261 4802134565 2999820393 4887036613 2784978973 3593730307 4783057633 4621084176 4331196830 4242984461 2287799528 3027767371 3699192818 3888960419 6398323452 2766114996 1734720583 6543430036 1955540148 5464479116 3177069662 5145942113 302...
result:
ok 3000 numbers
Test #6:
score: 0
Accepted
time: 88ms
memory: 4668kb
input:
300 621 259262308 372414267 976777900 567821544 262206094 972740633 932600104 702535786 494092920 919901107 797100568 708295156 632473907 101958470 952065075 970482879 183543308 323078517 719011818 352232578 159576652 124505381 125133768 492132730 331846050 577415810 369370004 871034176 529186574 44...
output:
8143086197 8197999468 5370721620 5343127707 5868323006 7992625789 5749423188 5019336842 5319894438 5228239187 5391752908 6084605805 6792215852 6057910407 8471127525 2719747215 6909535671 5100581420 5878004843 5586237425 6343902433 9390109727 5651124389 5472179570 7945151774 5064107530 4433748186 571...
result:
ok 300 numbers
Test #7:
score: 0
Accepted
time: 107ms
memory: 10584kb
input:
30 5308 560111855 290003681 946208440 140658046 860834453 480249720 506770353 922783074 600720525 693059141 436061359 545671168 528534807 339705109 831632761 570564203 113225613 578123930 293066534 269996029 765346927 443717770 933144287 856263710 475170893 174188152 464281143 864607591 443380284 12...
output:
8829755982 7996435040 9259425768 7684533044 9842457103 3917213508 5939555066 8695995697 9431906955 7466353560 8322921019 8970732656 8099619221 9390765699 6773331885 8521621715 9998520099 7876760589 6482847050 10167157889 8563826262 5569616375 7783052317 7313404561 7224267995 8986870714 9082031438 99...
result:
ok 30 numbers
Test #8:
score: 0
Accepted
time: 89ms
memory: 12660kb
input:
30 235 99 26 36 76 38 12 81 57 32 53 24 100 83 36 73 40 99 67 25 59 13 53 26 96 88 91 70 75 50 28 43 91 28 80 21 10 28 96 81 46 93 48 47 65 16 51 39 13 17 68 87 47 11 53 35 59 95 17 12 28 42 72 69 93 10 99 55 36 17 10 17 82 46 47 30 13 33 46 47 82 26 70 89 11 84 15 75 82 23 15 26 21 33 100 80 68 59 ...
output:
1853 53585 70793 41175 65095 19429 62735 44418 35618 52989 22194 74287 66783 60324 23354 10188 45849 43317 47709 44425 17639 2392 67454 75522 52049 63546 17778 37186 1857 31275
result:
ok 30 numbers
Test #9:
score: 0
Accepted
time: 234ms
memory: 81092kb
input:
3 99260 99 92 50 79 91 45 21 68 66 95 60 65 65 45 85 36 33 49 93 97 17 80 84 82 53 62 68 77 54 84 19 75 37 54 64 80 88 60 26 31 73 14 50 19 31 91 28 49 49 92 98 41 30 21 42 83 51 79 48 51 41 10 73 83 61 43 51 95 80 19 46 45 43 62 86 52 62 100 22 98 25 67 76 59 55 42 76 18 17 63 38 92 73 22 58 93 65 ...
output:
745947 689647 711794
result:
ok 3 number(s): "745947 689647 711794"
Test #10:
score: -100
Runtime Error
input:
3 100000 736164847 712451679 953221063 129734069 649878938 636159027 756625444 636178736 261073374 499660659 102302453 703591271 759851774 246224168 542866587 140617030 541228236 263272492 844843580 256780933 617601578 765332709 439622302 345560268 242255574 736020813 919249591 429525347 775345503 8...