首页 > 代码库 > UVA 10039 Railroads
UVA 10039 Railroads
这道题好吧,一开始便是拓扑排序的想法,搞了好久,试了多组测试数据,没错啊,可是没过。。。作孽啊,竟然忘了拓扑不能处理环,白浪费了一晚上。。。
只好用动态规划了。。
DP【time】【city】表示在time时刻到达city的最迟出发时间,当然,在这个时间不一定到city。
转移方程挺简单,不说你也会。
1 #include <iostream> 2 #include <cstdio> 3 #include <map> 4 #include <iomanip> 5 #include <string> 6 #include <cstring> 7 #include <algorithm> 8 using namespace std; 9 10 const int MAXN=105;11 const int MAXM=120000;12 const int inf=90000000;13 int head[MAXN];14 struct e{15 int u,v;16 int depart,arrival;17 int next;18 }edge[MAXM];19 int tot,n,m,limit;20 int start_city,des_city;21 string start,destin;22 int timeh[105][2450];23 24 void addedge(int u,int v,int de,int ar){25 edge[tot].u=u;26 edge[tot].v=v;27 edge[tot].depart=de;28 edge[tot].arrival=ar;29 edge[tot].next=head[u];30 head[u]=tot++;31 }32 33 void slove(){34 for(int e=head[start_city];e!=-1;e=edge[e].next){35 if(edge[e].depart>=limit){36 timeh[edge[e].v][edge[e].arrival]=edge[e].depart;37 }38 }39 for(int i=0;i<=2400;i++){40 for(int j=1;j<=n;j++){41 if(timeh[j][i]!=-1){42 for(int e=head[j];e!=-1;e=edge[e].next){43 if(i<=edge[e].depart){44 timeh[edge[e].v][edge[e].arrival]=max(timeh[edge[e].v][edge[e].arrival],timeh[j][i]);45 }46 }47 }48 }49 }50 for(int i=0;i<=2400;i++){51 if(timeh[des_city][i]!=-1){52 cout << "Departure " << setw(4) << setfill(‘0‘);53 cout << timeh[des_city][i] << " " << start << endl;54 cout << "Arrival " << setw(4) << setfill(‘0‘);55 cout << i << " " << destin << endl;56 return ;57 }58 }59 cout << "No connection" << endl;60 }61 62 int main(){63 string station,pre,cur;64 int cas=0;int T,pretime,curtime,u,v,train;65 scanf("%d",&T);66 while(T--){67 cas++; tot=0;68 memset(head,-1,sizeof(head));69 memset(timeh,-1,sizeof(timeh));70 map<string,int>city;71 scanf("%d",&n);72 for(int i=1;i<=n;i++){73 cin>>station;74 city[station]=i;75 }76 scanf("%d",&train);77 while(train--){78 scanf("%d",&m);79 for(int i=1;i<=m;i++){80 cin>>curtime>>cur;81 if(i>1){82 u=city[pre];83 v=city[cur];84 addedge(u,v,pretime,curtime);85 }86 pre=cur;87 pretime=curtime;88 }89 }90 cin>>limit>>start>>destin;91 start_city=city[start]; des_city=city[destin];92 cout << "Scenario " << cas << endl;93 slove();94 cout << endl;95 }96 return 0;97 }
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。