답안 #909215

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
909215 2024-01-17T06:19:12 Z ibm2006 Magic Tree (CEOI19_magictree) C++17
12 / 100
2000 ms 906916 KB
#include<bits/stdc++.h>
using namespace std;
typedef long long int ll;
ll n,i,j,k,l,r,x,y,z,w,s,t,b[1100000],dp[110000][1100],h[1100000],m;
vector<ll> v[1100000],u;
pair<ll,ll> a[1100000];
void f(ll x,ll y)
{
    ll i,j;
    for(i=0;i<h[x];i++)
    {
        if(v[x][i]==y)
            continue;
        f(v[x][i],x);
    }
    for(i=1;i<=k;i++)
    {
        s=0;
        for(j=0;j<h[x];j++)
        {
            if(v[x][j]==y)
                continue;
            if(i==1)
                b[j]=0;
            b[j]=max(b[j],dp[v[x][j]][i]);
            s+=b[j];
        }
        if(i==a[x].first)
            s+=a[x].second;
        dp[x][i]=s;
    }
}
int main()
{
    scanf("%lld %lld %lld",&n,&m,&k);
    for(i=2;i<=n;i++)
    {
        scanf("%lld",&x);
        y=i;
        v[x].push_back(y);
        v[y].push_back(x);
        h[x]++;
        h[y]++;
    }
    for(i=1;i<=m;i++)
    {
        scanf("%lld %lld %lld",&x,&y,&z);
        u.push_back(y);
        a[x]={y,z};
    }
    sort(u.begin(),u.end());
    u.erase(unique(u.begin(),u.end()),u.end());
    for(i=1;i<=m;i++)
    {
        a[x].first=lower_bound(u.begin(),u.end(),a[x].first)-u.begin()+1;
    }
    k=min(k,m);
    f(1,0);
    for(i=1;i<=k;i++)
    {
        s=max(s,dp[1][i]);
    }
    printf("%lld",s);
}

Compilation message

magictree.cpp: In function 'int main()':
magictree.cpp:35:10: warning: ignoring return value of 'int scanf(const char*, ...)' declared with attribute 'warn_unused_result' [-Wunused-result]
   35 |     scanf("%lld %lld %lld",&n,&m,&k);
      |     ~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~
magictree.cpp:38:14: warning: ignoring return value of 'int scanf(const char*, ...)' declared with attribute 'warn_unused_result' [-Wunused-result]
   38 |         scanf("%lld",&x);
      |         ~~~~~^~~~~~~~~~~
magictree.cpp:47:14: warning: ignoring return value of 'int scanf(const char*, ...)' declared with attribute 'warn_unused_result' [-Wunused-result]
   47 |         scanf("%lld %lld %lld",&x,&y,&z);
      |         ~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~
# 결과 실행 시간 메모리 Grader output
1 Correct 12 ms 31068 KB Output is correct
2 Correct 8 ms 31068 KB Output is correct
3 Incorrect 9 ms 31068 KB Output isn't correct
4 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Execution timed out 2039 ms 899228 KB Time limit exceeded
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Incorrect 15 ms 39516 KB Output isn't correct
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 188 ms 899708 KB Output is correct
2 Correct 217 ms 899704 KB Output is correct
3 Correct 176 ms 902516 KB Output is correct
4 Correct 178 ms 901932 KB Output is correct
5 Correct 185 ms 906916 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 12 ms 31068 KB Output is correct
2 Correct 8 ms 31068 KB Output is correct
3 Incorrect 9 ms 31068 KB Output isn't correct
4 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Incorrect 109 ms 206560 KB Output isn't correct
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 12 ms 31068 KB Output is correct
2 Correct 8 ms 31068 KB Output is correct
3 Incorrect 9 ms 31068 KB Output isn't correct
4 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 12 ms 31068 KB Output is correct
2 Correct 8 ms 31068 KB Output is correct
3 Incorrect 9 ms 31068 KB Output isn't correct
4 Halted 0 ms 0 KB -