/* Kristoffer Hansen. arnsfelt@daimi.au.dk */ #include #include #include #include #include map id; struct edge { int from,to; int dep,arr; edge() {}; edge(int from, int to, int dep, int arr) : from(from),to(to),dep(dep),arr(arr) {}; }; struct node { string name; int t; int m; vector in,out; }; vector G; int C; int start; string from,to; int fromid,toid; void dijkstra1() { int i,u; for (i=0; i=G[u].t && G[u].out[i].arrG[u].t)) u=i; if (u==-1 || G[u].t==-9999) break; G[u].m=1; for (i=0; iG[G[u].in[i].from].t) G[G[u].in[i].from].t = G[u].in[i].dep; } } int main() { int N,T,t; int i,j; int caseno; string c1,c2; int t1,t2; int id1,id2; cin >> N; for (caseno=1; caseno<=N ;caseno++) { cout << "Scenario " << caseno << endl; id.clear(); cin >> C; G = vector(C); for (i=0; i> c1; id[c1]=i; G[i].name=c1; } cin >> T; for (i=0; i> t; cin >> t2 >> c2; for (j=1; j> t2 >> c2; id1 = id[c1]; id2 = id[c2]; G[id1].out.push_back(edge(id1,id2,t1,t2)); G[id2].in.push_back(edge(id1,id2,t1,t2)); } } cin >> start >> from >> to; fromid = id[from]; toid = id[to]; dijkstra1(); if (G[toid].m==0) cout << "No connection\n"; else { dijkstra2(); printf("Departure %04d %s\n",G[fromid].t,G[fromid].name.c_str()); printf("Arrival %04d %s\n",G[toid].t,G[toid].name.c_str()); } cout << "\n"; } return 0; }