Submission #235685

#TimeUsernameProblemLanguageResultExecution timeMemory
235685Dilshod_ImomovCrocodile's Underground City (IOI11_crocodile)C++17
46 / 100
8 ms3072 KiB
#include "crocodile.h" #include <bits/stdc++.h> using namespace std; const int NN = 1e5 + 7; vector < pair < int, int > > adj[NN]; int dp[NN], l[NN], used[NN], isExit[NN], ban[NN]; void dfs( int v, int p ) { int mn1 = 1e9, mn2 = 1e9; used[v] = 1; if ( isExit[v] ) { dp[v] = 0; return; } // cout << "-> " << v << ' ' << p << '\n'; for ( auto pr: adj[v] ) { int u = pr.first, ind = pr.second; if ( ban[u] ) { continue; } if ( !used[u] ) { dfs( u, v ); } if ( u != p ) { int cnt = dp[u] + l[ind]; if ( cnt <= mn1 ) { mn2 = mn1; mn1 = cnt; } else if ( cnt < mn2 ) { mn2 = cnt; } } } // cout << "-> " << v << ' ' << mn1 << ' ' << mn2 << '\n'; dp[v] = mn2; } int travel_plan(int n, int m, int R[][2], int L[], int K, int P[]) { for ( int i = 0; i < m; i++ ) { int u = R[i][0], v = R[i][1]; adj[u].push_back( { v, i } ); adj[v].push_back( { u, i } ); l[i] = L[i]; } for ( int i = 0; i < K; i++ ) { isExit[ P[i] ] = 1; } for ( int i = 0; i < n; i++ ) { if ( (int)adj[i].size() == 2 && i && !isExit[i] ) { ban[i] = 1; } } dfs( 0, 0 ); return dp[0]; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...