제출 #582664

#제출 시각아이디문제언어결과실행 시간메모리
5826641ne악어의 지하 도시 (IOI11_crocodile)C++14
46 / 100
4 ms852 KiB
#include "crocodile.h" #include <bits/stdc++.h> using namespace std; int travel_plan(int N, int M, int R[][2], int L[], int K, int P[]) { vector<vector<pair<int,int>>>adj(N); for (int i = 0;i<M;++i){ adj[R[i][0]].push_back({R[i][1],L[i]}); adj[R[i][1]].push_back({R[i][0],L[i]}); } vector<bool>got(N,false); for (int i = 0;i<K;++i)got[P[i]] = true; vector<vector<long long>>dp(N,vector<long long>(2,1e9)); vector<bool>visited(N,false),in_cycle(N,false); const long long maxn = 1e9; vector<int>parent(N,-1); function<long long(int)>dfs = [&](int u){ if (got[u])return 0LL; if (visited[u]){ int y = u; in_cycle[y] = true; y = parent[y]; while(y!=u){ in_cycle[y] = true; y = parent[y]; } return maxn; } if (in_cycle[u]){ return maxn; } visited[u] = true; for (auto x:adj[u]){ if (x.first == parent[u])continue; parent[x.first] = u; long long temp = dfs(x.first) + x.second; parent[x.first] = -1; if (temp < dp[u][0]){ dp[u][1] = dp[u][0]; dp[u][0] = temp; } else if (temp < dp[u][1]){ dp[u][1] = temp; } } visited[u] = false; return dp[u][1]; }; long long ans = dfs(0); return ans; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...