# | Submission time | Handle | Problem | Language | Result | Execution time | Memory |
---|---|---|---|---|---|---|---|
345794 | 2021-01-08T05:08:59 Z | daniel920712 | Crocodile's Underground City (IOI11_crocodile) | C++14 | 0 ms | 0 KB |
#include "crocodile.h" #include "assert.h" #include <vector> #include <utility> #include <algorithm> #include <queue> #include <map> using namespace std; vector < pair < long long , long long > > Next[100005]; vector < pair < long long , long long > > Next2[100005]; map < long long , long long > how[100005]; bool is[100005]; long long F(long long fa,long long here) { long long t; vector < long long > tt; if(is[here]) return 0; if(how[here].find(fa)!=how[here].end()) return how[here][fa]; how[here][fa]=-1; for(auto i:Next[here]) { if(i.first!=fa) { t=F(here,i.first); if(t!=-1) tt.push_back(t+i.second); } else ok=1; } sort(tt.begin(),tt.end()); if(tt.size()>=2) how[here][fa]=tt[1]; else if(ok) how[here][fa]=tt[0]; else how[here][fa]=-1; //printf("%lld %lld %lld\n",here,fa,how[here][fa]); return how[here][fa]; } int travel_plan(int N, int M, int R[][2], int L[], int K, int P[]) { int i; long long a,b,c; for(i=0;i<M;i++) { Next[R[i][0]].push_back(make_pair((long long) R[i][1],(long long) L[i])); Next[R[i][1]].push_back(make_pair((long long) R[i][0],(long long) L[i])); } for(i=0;i<K;i++) is[P[i]]=1; return (int) F(-1,0); }