Submission #907568

# Submission time Handle Problem Language Result Execution time Memory
907568 2024-01-15T21:22:00 Z I_FloPPed21 Valley (BOI19_valley) C++14
0 / 100
11 ms 33736 KB
#include <fstream>
#include <vector>
using namespace std;
ifstream cin("file.in");
ofstream cout("file.out");
int n, s, q, e ;
vector<pair<int,int>> edge [1000005];
long long tin[1000005], tout [1000005], shop [1000005], ext[1000005];
long long rev[ 1000005];
vector<int> v;
long long depth [ 300005];
void dfs ( int nod,int p )
{
    depth[nod] = depth[p] + 1;
    v.push_back(nod);
    if (tin[nod] == 0 )
    {
        tin [nod] = v.size() ;
    }
    for ( auto u : edge[nod] )
    {
        if ( u.first != p)
        {
            dfs (u.first, nod );
            v.push_back(nod);
        }
    }

    tout[nod] = v.size();
}

long long jmp[ 600005 ][ 19] ;

void dfs4(int nod, int p )
{

    for ( auto u :edge[nod])
    {
        if ( u.first != p )
        {
            rev[u.first] = rev[nod] + u.second;
            dfs4(u.first,nod);
        }
    }

}
void dfs2 ( int nod, int p )
{
    for ( auto u : edge[nod])
    {
        if ( u.first != p )
        {
            dfs2 (u.first, nod);
        }
    }

    if (shop [nod] == 1 )
        ext[nod] = rev[nod];
    else
        ext[nod] = 1e18 ;

    for ( auto u : edge[nod] )
    {
        if ( u.first != p )
        {
            ext[nod] = min ( ext[nod], ext[u.first]);
        }
    }
}
long long mag[600005][18];
void dfs3 ( int nod, int p )
{

    jmp[nod][0] = p;
    mag[nod][0] = ext[nod];

    for ( int k = 1 ; k <= 18 ; k ++ )
    {
        jmp[nod][k] = jmp[jmp[nod][k-1]][k-1];
        mag[nod][k] = min(mag[nod][k-1], mag[jmp[nod][k-1]][k-1]);
    }

    for ( auto u : edge[nod] )
    {
        if (u .first != p)
            dfs3(u.first,nod);
    }
}
vector<pair<int,int>> qr;
long long jumps( int nod, int p )
{

    long long ans = 1e18 ;
    long long u = nod ;
    for ( int k = 0 ; k <= 19 ; k ++ )
    {
        if ( p & ( 1 << k ) )
        {
            ans = min ( ans , mag[u][k]);
            u = jmp[u][k];
        }

    }

    return ans + rev[nod];
}
int main()
{
    ios::sync_with_stdio(0);
    cin.tie(0);
    cout.tie(0);
    cin >> n >> s >> q >> e;

    for ( int i =1; i < n ; i ++ )
    {
        int a, b,c;
        cin >> a >> b>>c;
        edge[a].push_back({b,c});
        edge[b].push_back({a,c});
        qr.push_back({a,b});
    }
    for( int i = 1; i <= s; i ++ )
    {
        int val;
        cin >> val ;
        shop [val] = 1;
    }
    dfs(e,0);
    dfs4(e,0);

    dfs2(e,0);
    for ( int i = 1; i <= n ; i ++ )
        ext [i] -= 2 * rev[i];

    dfs3(e,0);





    //cout << mag[2][0] << " " << " hsb" << '\n';
    for ( int i = 1; i <= q; i ++ )
    {
        int l, r;
        cin >> l >> r ;
        l -- ;
        int  a = qr[l].first;
        int b = qr[l].second;

        int tg ;

        if ( tin[a] <= tin[b] && tout[a] >= tout[b])
            tg = b ;
        else
            tg = a;

        if ( tin[tg] <= tin[r] && tout[tg] >= tout[r])
        {

        }
        else
        {
            cout << "escaped" << '\n';
            continue ;
        }


        int c = depth[tg] - depth[r];
        long long ans = jumps(r,c) ;
        if ( ans >= 1e16 )
        {
            cout << "oo" << '\n';
            continue;
        }

        cout << ans  << '\n';

    }


    return 0;
}

Compilation message

valley.cpp: In function 'void dfs3(int, int)':
valley.cpp:80:21: warning: iteration 17 invokes undefined behavior [-Waggressive-loop-optimizations]
   80 |         mag[nod][k] = min(mag[nod][k-1], mag[jmp[nod][k-1]][k-1]);
      |         ~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
valley.cpp:77:25: note: within this loop
   77 |     for ( int k = 1 ; k <= 18 ; k ++ )
      |                       ~~^~~~~
# Verdict Execution time Memory Grader output
1 Incorrect 11 ms 33628 KB Output isn't correct
2 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Incorrect 11 ms 33628 KB Output isn't correct
2 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Incorrect 10 ms 33736 KB Output isn't correct
2 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Incorrect 11 ms 33628 KB Output isn't correct
2 Halted 0 ms 0 KB -