Submission #7165

#TimeUsernameProblemLanguageResultExecution timeMemory
7165baneling100약속장소 정하기 (GCJ12KOR_appointment)C++98
35 / 35
880 ms5832 KiB
#include <stdio.h> #include <vector> #include <queue> #define INF 0x7fffffff using namespace std; typedef pair <int,int> ppair; vector <ppair> A[10001]; priority_queue <ppair,vector<ppair>,greater<ppair> > Q; int T, N, P, M, X[101], V[101], D[10001], Ans[10001], Res, Y; void input(void) { int i, j, d, l, c1, c2; scanf("%d %d %d",&N,&P,&M); Res=INF; for(i=1 ; i<=N ; i++) { A[i].clear(); Ans[i]=0; } for(i=1 ; i<=P ; i++) scanf("%d %d",&X[i],&V[i]); for(i=1 ; i<=M ; i++) { scanf("%d %d %d",&d,&l,&c1); for(j=2 ; j<=l ; j++) { scanf("%d",&c2); A[c1].push_back(make_pair(c2,d)); A[c2].push_back(make_pair(c1,d)); c1=c2; } } } void process(void) { int i, j, k, now; for(i=1 ; i<=P ; i++) { for(j=1 ; j<=N ; j++) D[j]=INF; D[X[i]]=0; Q.push(make_pair(0,X[i])); while(!Q.empty()) { now=Q.top().second; Q.pop(); k=A[now].size(); for(j=0 ; j<k ; j++) if(D[A[now][j].first]>D[now]+A[now][j].second) { D[A[now][j].first]=D[now]+A[now][j].second; Q.push(make_pair(D[A[now][j].first],A[now][j].first)); } } for(j=1 ; j<=N ; j++) { if(D[j]!=INF) D[j]*=V[i]; if(Ans[j]<D[j]) Ans[j]=D[j]; } } for(i=1 ; i<=N ; i++) if(Res>Ans[i]) Res=Ans[i]; } void output(void) { if(Res==INF) printf("Case #%d: -1\n",Y); else printf("Case #%d: %d\n",Y,Res); } int main(void) { int i; scanf("%d",&T); for(i=1 ; i<=T ; i++) { Y=i; input(); process(); output(); } return 0; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...