QOJ.ac

QOJ

IDProblemSubmitterResultTimeMemoryLanguageFile sizeSubmit timeJudge time
#292282#7966. 采矿FamiglistmoAC ✓502ms112816kbC++143.4kb2023-12-27 22:28:432023-12-27 22:28:44

Judging History

你现在查看的是最新测评结果

  • [2023-12-27 22:28:44]
  • 评测
  • 测评结果:AC
  • 用时:502ms
  • 内存:112816kb
  • [2023-12-27 22:28:43]
  • 提交

answer

#include<bits/stdc++.h>
#define JK for(int j=0;j<=siz[son[i][0]];++j)for(int k=0;k<=siz[son[i][1]];++k)
using namespace std;
typedef long long ll;
const int N=305;
const ll inf=1e16;

ll f[N][N][N],g[N][N][N],h[N][N];
int fath[N],r[N],p[N],siz[N],rev[N],dfn[N];
vector<int> son[N];
vector<ll> val[N][2];
int n,q,s,tim,cnt;

bool check(int u,int v){
    return dfn[u]<=dfn[v]&&dfn[v]<=dfn[u]+siz[u]-1;
}
void dfs(int u){
    siz[u]=1,dfn[u]=++tim,rev[tim]=u;
    for(auto v:son[u])if(v)dfs(v),siz[u]+=siz[v];
}

void clear(){
    for(int i=1;i<=n;++i) JK f[i][j][k]=-inf;
    for(int i=1;i<=n;++i)for(int j=0;j<=n;++j)h[i][j]=-inf;
}
void load(){
    for(int i=1;i<=n;++i) JK g[i][j][k]=f[i][j][k];
}

ll get(int i,int _,int j){
    if(!i)return 0;
    return val[i][_][j];
}
bool cmax(ll &a,ll b){ return a<b?a=b,1:0; }

void work(int tp){
    if(tp==1){
        for(int i=2;i<=n;++i)
            JK if(cnt-j-k<n-siz[i])
                cmax(h[i][j+k],g[i][j][k]);

        for(int _=n;_>=1;--_){
            int i=rev[_];
            JK if(j+k<=cnt&&cnt-j-k<=n-siz[i]){
                if(son[i][0]) cmax(f[i][j][k],h[son[i][0]][j]);
                if(son[i][1]) cmax(f[i][j][k],h[son[i][1]][k]);
                if(cnt-j-k<n-siz[i]) cmax(h[i][j+k],f[i][j][k]);
            }
        }
    }
    if(tp==2){
        for(int i=1;i<=n;++i) JK {
            if(son[i][0]&&j<siz[son[i][0]])
                cmax(h[son[i][0]][j],g[i][j][k]);
            if(son[i][1]&&k<siz[son[i][1]])
                cmax(h[son[i][1]][k],g[i][j][k]);
        }

        for(int _=1;_<=n;++_){
            int i=rev[_];
            JK { 
                cmax(f[i][j][k],h[i][j+k]);
                {
                    if(son[i][0]&&j<siz[son[i][0]])
                        cmax(h[son[i][0]][j],f[i][j][k]);
                    if(son[i][1]&&k<siz[son[i][1]])
                        cmax(h[son[i][1]][k],f[i][j][k]);
                }
            }
        }
    }
    if(tp==3){
        for(int i=1;i<=n;++i) JK
            if(cnt-j-k<n-siz[i]) f[i][j][k]=g[i][j][k];
        ++cnt;
    }
    if(tp==4){
        for(int i=1;i<=n;++i) JK
            if(cnt-j-k>0) f[i][j][k]=g[i][j][k];
        --cnt;
    }

    for(int i=1;i<=n;++i) JK if(f[i][j][k]>=0)
        f[i][j][k]+=get(son[i][0],0,j)+get(son[i][1],0,k)+get(i,1,cnt-j-k)+r[i];
}

signed main(){
    ios::sync_with_stdio(false);
    cin.tie(0),cout.tie(0);

    cin>>n>>q>>s;

    for(int i=2;i<=n;++i)
        cin>>fath[i],son[fath[i]].push_back(i);
    for(int i=1;i<=n;++i)while(son[i].size()<2)son[i].push_back(0);
    for(int i=2;i<=n;++i)cin>>r[i];
    for(int i=2;i<=n;++i)cin>>p[i];

    dfs(1);
    for(int i=1;i<=n;++i){
        for(int j=1;j<=n;++j)
            if(check(i,j))val[i][0].push_back(p[j]);
            else val[i][1].push_back(p[j]);

        for(int _=0;_<2;++_){
            sort(val[i][_].begin(),val[i][_].end(),greater<int>());
            val[i][_].insert(val[i][_].begin(),0);
            for(int j=1;j<(int)val[i][_].size();++j)
                val[i][_][j]+=val[i][_][j-1];
        }
    }

    clear();
    f[s][0][0]=0;
    for(int i=1,tp;i<=q;++i)
        load(),clear(),cin>>tp,work(tp);

    ll ans=-inf;
    for(int i=1;i<=n;++i) JK ans=max(ans,f[i][j][k]);
    
    if(ans<0) cout<<"No solution.\n";
    else cout<<ans<<'\n';
    return 0;
}

Details

Tip: Click on the bar to expand more detailed information

Test #1:

score: 100
Accepted
time: 138ms
memory: 15692kb

input:

300 600 175
1 2 1 4 4 2 7 8 9 8 3 5 12 10 6 6 13 15 9 11 11 13 15 22 14 26 27 12 5 16 10 24 23 16 33 34 21 22 37 39 17 39 40 20 36 28 40 33 48 29 26 46 46 18 37 32 20 38 54 45 19 30 52 27 18 60 41 57 30 50 48 47 65 17 35 14 55 24 78 80 71 81 28 3 21 19 63 35 75 75 73 92 89 36 81 50 34 93 85 43 42 78...

output:

4588927051034

result:

ok single line: '4588927051034'

Test #2:

score: 0
Accepted
time: 132ms
memory: 15452kb

input:

300 600 286
1 1 3 3 5 6 6 7 7 9 2 2 9 10 5 13 11 12 8 15 20 22 11 15 21 16 4 26 19 20 25 27 10 23 13 12 32 32 8 26 18 19 28 42 4 46 41 37 23 43 30 25 34 47 49 22 40 48 28 45 16 35 35 63 55 33 44 61 21 56 61 59 63 65 73 47 42 51 62 76 48 59 39 66 58 77 57 73 68 27 29 53 85 83 56 41 60 69 74 58 100 10...

output:

40349159313289

result:

ok single line: '40349159313289'

Test #3:

score: 0
Accepted
time: 502ms
memory: 112816kb

input:

301 600 153
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 ...

output:

44810792039851

result:

ok single line: '44810792039851'

Test #4:

score: 0
Accepted
time: 197ms
memory: 41016kb

input:

300 600 264
1 1 2 2 3 6 6 7 9 10 10 12 5 11 15 12 11 14 16 14 17 17 16 21 25 19 27 28 26 28 24 29 33 31 35 34 31 30 32 39 33 39 37 43 44 46 42 46 43 49 45 45 47 48 51 47 56 57 54 57 59 53 58 56 58 59 61 60 68 65 67 68 70 69 67 69 70 73 72 80 76 76 82 78 77 77 87 87 82 90 85 85 91 86 95 93 96 96 91 9...

output:

52315813623226

result:

ok single line: '52315813623226'

Test #5:

score: 0
Accepted
time: 208ms
memory: 41888kb

input:

300 600 33
1 1 2 4 4 2 5 5 9 9 8 11 10 12 13 13 15 11 18 19 18 16 19 22 17 22 21 23 28 25 29 27 29 34 28 30 31 36 38 34 39 39 35 44 36 42 38 45 41 45 43 52 44 52 51 48 55 56 55 56 60 57 54 60 58 66 59 63 63 61 68 67 68 65 72 71 74 76 72 80 73 74 83 81 82 81 79 87 86 85 91 86 88 88 94 89 90 94 98 97 ...

output:

48722943497148

result:

ok single line: '48722943497148'

Test #6:

score: 0
Accepted
time: 191ms
memory: 42200kb

input:

300 600 42
1 1 3 4 2 2 5 8 8 9 6 9 11 13 11 12 15 12 10 19 15 19 21 18 16 25 18 21 28 28 23 29 27 34 26 27 31 33 30 32 37 34 39 43 42 45 39 40 40 45 51 50 50 51 52 52 54 58 55 57 59 60 54 62 65 66 66 67 60 63 62 63 73 73 68 76 76 71 71 77 81 78 82 79 84 79 84 83 87 87 85 91 92 89 94 93 90 95 99 95 9...

output:

55427849622319

result:

ok single line: '55427849622319'

Test #7:

score: 0
Accepted
time: 203ms
memory: 42976kb

input:

300 600 137
1 2 1 3 2 6 7 6 4 8 11 5 11 5 13 12 10 10 12 17 13 18 22 18 21 20 20 23 23 27 27 29 25 29 33 35 36 31 33 35 40 40 43 44 39 43 41 46 42 46 49 44 53 52 55 54 51 55 51 59 56 61 54 62 61 59 64 62 60 68 67 63 65 73 72 73 72 75 74 79 77 80 78 76 77 83 78 80 88 89 86 90 89 91 90 93 92 97 95 95 ...

output:

53287628221118

result:

ok single line: '53287628221118'

Test #8:

score: 0
Accepted
time: 228ms
memory: 48632kb

input:

300 600 70
1 1 2 2 3 3 5 6 9 8 9 10 13 8 6 12 16 12 17 16 20 20 21 23 23 21 22 27 22 28 25 31 25 33 34 33 37 38 34 35 35 38 36 43 39 39 45 40 41 42 43 44 52 54 47 50 57 53 51 56 56 53 60 63 61 65 58 66 61 68 62 65 69 73 72 68 72 78 76 79 74 76 82 81 84 77 84 88 85 85 82 91 86 92 89 92 91 95 98 99 96...

output:

52245066034805

result:

ok single line: '52245066034805'

Test #9:

score: 0
Accepted
time: 177ms
memory: 35960kb

input:

300 600 56
1 2 2 4 3 6 1 7 7 6 5 11 8 12 12 10 9 14 13 11 14 13 18 21 20 25 18 21 20 27 24 32 32 33 29 30 28 30 37 40 33 36 34 38 41 38 47 48 44 43 48 51 53 50 49 56 52 56 55 52 57 54 60 63 61 60 61 68 65 70 63 66 70 69 67 72 77 77 72 73 80 78 81 81 80 78 82 88 88 89 90 89 90 91 86 87 97 91 93 97 94...

output:

54169471106772

result:

ok single line: '54169471106772'

Test #10:

score: 0
Accepted
time: 196ms
memory: 34928kb

input:

300 600 105
1 1 3 3 2 6 4 2 8 5 9 6 10 14 7 12 13 9 17 14 12 20 21 19 22 22 24 27 23 30 28 29 32 34 32 33 30 33 35 31 38 38 35 43 36 39 44 44 43 46 50 50 45 53 48 52 56 57 52 54 53 59 55 59 64 62 66 60 60 66 70 63 70 71 72 74 77 78 72 76 75 81 80 82 80 85 79 79 89 89 83 90 91 94 86 88 97 95 95 94 10...

output:

50990422314888

result:

ok single line: '50990422314888'

Test #11:

score: 0
Accepted
time: 202ms
memory: 42380kb

input:

300 600 99
1 2 3 1 3 5 6 6 2 8 11 10 9 13 10 14 13 16 17 17 19 19 20 15 21 18 18 27 29 28 23 29 30 34 31 35 32 31 37 40 34 40 42 42 39 38 47 48 43 47 51 46 49 50 51 48 49 58 50 54 52 62 60 57 63 63 64 68 62 66 70 67 69 71 66 74 71 76 76 77 81 75 81 77 85 84 82 85 89 86 82 87 92 94 86 96 90 97 90 96 ...

output:

50233132966129

result:

ok single line: '50233132966129'

Test #12:

score: 0
Accepted
time: 141ms
memory: 16172kb

input:

300 600 57
1 1 3 4 4 5 7 8 6 8 9 10 3 5 12 11 13 16 12 15 19 11 17 17 19 25 14 2 29 10 9 32 28 29 32 33 34 7 16 36 25 27 38 38 6 26 18 42 27 49 36 20 28 43 20 14 37 18 34 24 53 2 31 53 31 33 54 40 30 41 57 44 64 46 42 71 60 51 59 45 49 21 54 47 47 75 69 45 24 23 80 87 86 75 95 92 70 48 55 95 56 90 6...

output:

4351680767374

result:

ok single line: '4351680767374'

Test #13:

score: 0
Accepted
time: 182ms
memory: 36948kb

input:

300 600 111
1 2 1 4 3 6 5 8 7 5 10 12 7 11 6 14 17 12 13 13 20 14 21 23 17 18 23 20 29 28 22 30 28 34 34 31 35 29 31 32 36 37 40 37 39 43 43 41 40 49 44 46 44 48 49 48 53 55 53 51 52 62 59 55 63 66 60 65 65 70 67 69 66 71 73 67 73 77 76 72 72 80 77 83 82 84 84 82 88 90 83 87 88 87 93 96 92 93 98 98 ...

output:

50231080085638

result:

ok single line: '50231080085638'

Test #14:

score: 0
Accepted
time: 187ms
memory: 37624kb

input:

300 600 202
1 1 3 4 3 2 7 6 2 10 10 11 5 8 7 12 8 11 18 17 18 17 20 22 20 21 24 26 27 23 28 31 28 30 26 30 29 32 38 36 35 38 40 36 40 46 43 45 45 46 47 49 48 50 52 51 56 53 50 56 60 57 58 64 65 64 59 60 68 63 70 63 73 73 75 76 71 75 78 77 81 76 83 84 78 85 81 86 82 82 83 92 90 94 90 96 91 93 94 91 9...

output:

47868585292289

result:

ok single line: '47868585292289'

Test #15:

score: 0
Accepted
time: 99ms
memory: 8796kb

input:

301 600 150
1 1 3 3 5 5 7 7 9 9 11 11 13 13 15 15 17 17 19 19 21 21 23 23 25 25 27 27 29 29 31 31 33 33 35 35 37 37 39 39 41 41 43 43 45 45 47 47 49 49 51 51 53 53 55 55 57 57 59 59 61 61 63 63 65 65 67 67 69 69 71 71 73 73 75 75 77 77 79 79 81 81 83 83 85 85 87 87 89 89 91 91 93 93 95 95 97 97 99 9...

output:

1557184330900

result:

ok single line: '1557184330900'

Test #16:

score: 0
Accepted
time: 142ms
memory: 27616kb

input:

300 600 191
1 2 3 2 4 4 6 6 8 9 3 7 13 7 13 11 14 12 15 15 21 16 14 22 25 22 24 23 21 26 28 27 28 33 30 33 32 36 30 31 32 35 37 43 40 45 39 40 41 41 48 46 46 54 53 55 57 49 50 59 60 59 61 57 61 65 66 64 63 63 64 66 71 73 74 69 71 74 76 79 76 79 81 78 85 86 83 87 83 87 86 84 90 92 91 96 90 93 92 91 9...

output:

No solution.

result:

ok single line: 'No solution.'

Test #17:

score: 0
Accepted
time: 186ms
memory: 39020kb

input:

300 600 189
1 2 2 4 4 1 5 5 8 7 11 12 12 7 15 15 8 18 10 13 21 20 22 16 21 22 20 19 24 23 30 28 29 34 29 30 37 38 38 36 32 42 34 35 41 40 39 40 47 48 45 49 48 53 49 47 55 57 53 51 56 54 59 64 56 59 64 65 62 62 66 71 70 66 70 67 69 73 77 77 76 73 80 84 81 79 87 79 83 84 85 83 87 94 94 93 88 97 90 92 ...

output:

No solution.

result:

ok single line: 'No solution.'

Test #18:

score: 0
Accepted
time: 107ms
memory: 14544kb

input:

300 600 271
1 2 2 4 4 5 1 8 9 5 11 3 12 7 11 7 16 9 19 19 16 8 3 24 25 25 27 14 10 15 17 15 32 20 29 26 26 28 23 33 23 28 41 35 27 44 32 47 17 44 6 50 52 35 54 10 45 55 43 52 13 21 46 42 20 42 47 60 64 67 39 21 57 56 63 55 71 18 22 54 43 57 34 56 36 51 59 68 53 59 74 34 76 69 94 48 13 41 53 64 12 18...

output:

No solution.

result:

ok single line: 'No solution.'

Test #19:

score: 0
Accepted
time: 139ms
memory: 13448kb

input:

300 600 64
1 1 3 3 2 5 5 8 8 9 6 12 4 12 15 14 16 16 14 2 13 18 6 15 7 13 18 22 20 10 24 31 20 26 26 31 32 33 37 24 36 37 10 27 33 7 42 44 22 38 38 9 49 32 55 53 21 19 57 35 43 55 51 21 34 62 17 43 48 68 53 47 65 69 50 72 70 47 25 40 67 50 39 77 45 60 36 81 29 65 58 41 41 63 72 60 83 56 97 19 68 90 ...

output:

No solution.

result:

ok single line: 'No solution.'

Test #20:

score: 0
Accepted
time: 86ms
memory: 15248kb

input:

300 600 170
1 2 3 2 1 6 7 4 7 4 10 9 5 10 11 9 5 17 17 16 3 19 20 8 13 8 20 12 19 22 28 28 29 14 22 11 29 25 14 6 13 40 36 35 45 18 37 12 47 31 15 26 25 41 49 26 31 53 53 34 21 45 23 42 58 47 61 66 59 39 61 66 44 21 48 75 50 27 77 48 77 56 60 75 63 62 86 84 67 71 38 51 81 30 37 85 89 80 87 36 78 52 ...

output:

No solution.

result:

ok single line: 'No solution.'

Test #21:

score: 0
Accepted
time: 144ms
memory: 15696kb

input:

300 600 214
1 1 3 3 5 5 4 4 9 10 7 9 13 11 7 8 15 10 16 11 18 17 22 23 12 18 16 25 23 24 12 15 24 14 21 31 36 21 17 39 39 36 30 20 32 26 45 38 46 8 49 22 30 28 33 49 50 58 27 44 32 46 58 44 37 48 38 28 43 13 62 66 31 14 35 63 74 34 68 25 42 26 76 76 19 41 85 56 29 78 63 61 82 59 64 6 62 65 97 43 51 ...

output:

4485712836520

result:

ok single line: '4485712836520'

Test #22:

score: 0
Accepted
time: 1ms
memory: 3548kb

input:

6 3 2
1 2 3 3 2
45 38 27 44 79
5 3 5 5 9
1
2
3

output:

163

result:

ok single line: '163'

Test #23:

score: 0
Accepted
time: 139ms
memory: 15180kb

input:

300 600 296
1 1 3 4 4 5 7 7 6 3 5 12 12 13 2 10 13 2 8 20 15 21 16 16 24 24 8 26 18 22 18 27 21 34 10 34 20 38 25 38 28 36 28 22 6 40 40 42 15 44 44 29 29 9 41 50 57 43 50 57 42 32 62 46 14 60 56 9 41 30 71 60 63 54 48 65 73 74 14 27 63 72 25 66 56 71 43 23 32 70 83 48 88 49 26 47 85 53 39 23 45 98 ...

output:

4411111707253

result:

ok single line: '4411111707253'

Test #24:

score: 0
Accepted
time: 137ms
memory: 14540kb

input:

300 600 110
1 1 2 3 2 4 6 3 6 10 7 7 13 4 8 9 11 14 15 9 15 19 13 5 21 5 8 11 23 18 10 26 22 23 16 30 34 20 20 22 34 36 33 31 16 21 40 19 17 43 31 35 14 35 12 12 30 26 50 51 59 59 56 43 44 55 18 48 46 29 62 28 28 44 50 25 65 71 74 77 61 55 25 39 80 84 71 74 62 80 63 48 67 17 69 76 87 38 82 83 27 51 ...

output:

4479248027267

result:

ok single line: '4479248027267'

Test #25:

score: 0
Accepted
time: 142ms
memory: 14992kb

input:

300 600 254
1 2 1 3 2 6 3 7 8 10 9 5 4 12 5 16 6 13 13 4 18 10 11 14 8 23 7 16 22 18 15 26 25 31 19 11 29 29 35 20 41 42 14 25 23 35 33 24 36 33 27 15 40 48 41 39 39 46 19 12 36 51 34 37 61 58 22 58 42 64 32 20 28 9 72 60 76 49 46 70 47 61 69 80 45 69 76 79 44 90 86 34 77 60 71 48 64 66 43 86 92 53 ...

output:

4532069466798

result:

ok single line: '4532069466798'

Test #26:

score: 0
Accepted
time: 142ms
memory: 15256kb

input:

300 600 274
1 1 2 4 3 4 2 7 9 7 11 9 10 3 8 16 5 17 16 10 5 14 23 22 24 25 24 27 28 11 8 22 27 6 12 18 20 12 6 23 15 41 26 34 29 20 37 14 18 41 35 37 31 43 29 32 15 26 47 42 19 32 17 35 21 30 65 68 36 28 49 13 70 58 49 65 75 55 61 47 54 55 82 46 58 60 68 73 39 64 25 75 50 31 45 50 66 97 73 53 82 94 ...

output:

37149511717824

result:

ok single line: '37149511717824'

Test #27:

score: 0
Accepted
time: 136ms
memory: 15368kb

input:

300 600 262
1 2 1 4 5 5 3 7 7 6 11 8 3 11 2 16 9 17 8 19 12 13 20 14 9 6 4 16 17 24 29 30 32 15 23 18 23 19 33 21 31 12 36 29 44 36 41 45 31 18 33 25 35 39 46 50 46 52 35 38 52 61 32 39 59 27 30 57 63 43 56 28 45 50 63 74 64 61 71 79 56 60 69 27 13 20 87 28 76 10 82 75 15 21 24 70 43 94 58 75 69 55 ...

output:

38295501087283

result:

ok single line: '38295501087283'