제출 #345769

#제출 시각아이디문제언어결과실행 시간메모리
345769daniel920712악어의 지하 도시 (IOI11_crocodile)C++14
0 / 100
11 ms9836 KiB
#include "crocodile.h" #include <vector> #include <utility> #include <algorithm> #include <queue> #include <map> using namespace std; bool is[100005]; long long small[5][100005]; vector < pair < long long , long long > > Next[100005]; vector < pair < long long , long long > > Next2[100005]; map < long long , long long > how[100005]; bool have[5][100005]={0}; long long ans=0; priority_queue < pair < long long , pair < long long , long long > > , vector < pair < long long , pair < long long , long long > > > , greater < pair < long long , pair < long long , long long > > > > dij; long long F(long long fa,long long here,long long con) { long long t; vector < pair < long long , long long > > tt; //printf("%lld %lld\n",here,con); if(is[here]) { ans=con; return 0; } for(auto i:Next[here]) if(small[1][i.first]!=-1&&i.first!=fa) tt.push_back(make_pair(small[1][i.first]+i.second,i.first)); sort(tt.begin(),tt.end()); //printf("%lld %d\n",here,tt.size()); if(tt.size()>=2) { return F(here,tt[1].second,con+how[here][tt[1].second]); } else while(1) ; } int travel_plan(int N, int M, int R[][2], int L[], int K, int P[]) { int i,j; 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])); how[R[i][0]][R[i][1]]=L[i]; how[R[i][1]][R[i][0]]=L[i]; } for(i=0;i<K;i++) { is[P[i]]=1; small[0][P[i]]=0; small[1][P[i]]=0; } for(i=0;i<N;i++) { small[0][i]=-1; small[1][i]=-1; for(j=0;j<N;j++) { have[0][j]=0; have[1][j]=0; } dij.push(make_pair(0,make_pair(i,-1))); while(!dij.empty()) { a=dij.top().first; b=dij.top().second.first; c=dij.top().second.second; dij.pop(); if(is[b]) { if(small[0][i]==-1) small[0][i]=a; else if(small[1][i]==-1) small[1][i]=a; continue; } if(have[0][b]==0) have[0][b]=1; else if(have[1][b]==0) have[1][b]=1; else continue; for(auto i:Next[b]) { if(i.first==c) continue; //printf("%lld %lld\n",i.first,i.second); dij.push(make_pair(i.second+a,make_pair(i.first,b))); } } //printf("%lld %lld\n",small[0][i],small[1][i]); } for(i=0;i<K;i++) { is[P[i]]=1; small[0][P[i]]=0; small[1][P[i]]=0; } //for(i=0;i<N;i++) printf("aa %lld %lld\n",small[0][i],small[1][i]); F(-1,0,0); return ans; }

컴파일 시 표준 에러 (stderr) 메시지

crocodile.cpp: In function 'long long int F(long long int, long long int, long long int)':
crocodile.cpp:18:15: warning: unused variable 't' [-Wunused-variable]
   18 |     long long t;
      |               ^
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...