这道题好吧,一开始便是拓扑排序的想法,搞了好久,试了多组测试数据,没错啊,可是没过。。。作孽啊,竟然忘了拓扑不能处理环,白浪费了一晚上。。。

只好用动态规划了。。

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=;
  11. const int MAXM=;
  12. const int inf=;
  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[][];
  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!=-;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=;i<=;i++){
  40. for(int j=;j<=n;j++){
  41. if(timeh[j][i]!=-){
  42. for(int e=head[j];e!=-;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=;i<=;i++){
  51. if(timeh[des_city][i]!=-){
  52. cout << "Departure " << setw() << setfill('');
  53. cout << timeh[des_city][i] << " " << start << endl;
  54. cout << "Arrival " << setw() << setfill('');
  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=;int T,pretime,curtime,u,v,train;
  65. scanf("%d",&T);
  66. while(T--){
  67. cas++; tot=;
  68. memset(head,-,sizeof(head));
  69. memset(timeh,-,sizeof(timeh));
  70. map<string,int>city;
  71. scanf("%d",&n);
  72. for(int i=;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=;i<=m;i++){
  80. cin>>curtime>>cur;
  81. if(i>){
  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 ;
  97. }

UVA 10039 Railroads的更多相关文章

  1. (Step1-500题)UVaOJ+算法竞赛入门经典+挑战编程+USACO

    http://www.cnblogs.com/sxiszero/p/3618737.html 下面给出的题目共计560道,去掉重复的也有近500题,作为ACMer Training Step1,用1年 ...

  2. ACM训练计划step 1 [非原创]

    (Step1-500题)UVaOJ+算法竞赛入门经典+挑战编程+USACO 下面给出的题目共计560道,去掉重复的也有近500题,作为ACMer Training Step1,用1年到1年半年时间完成 ...

  3. 算法竞赛入门经典+挑战编程+USACO

    下面给出的题目共计560道,去掉重复的也有近500题,作为ACMer Training Step1,用1年到1年半年时间完成.打牢基础,厚积薄发. 一.UVaOJ http://uva.onlinej ...

  4. uva 1354 Mobile Computing ——yhx

    aaarticlea/png;base64,iVBORw0KGgoAAAANSUhEUgAABGcAAANuCAYAAAC7f2QuAAAgAElEQVR4nOy9XUhjWbo3vu72RRgkF5

  5. UVA 10564 Paths through the Hourglass[DP 打印]

    UVA - 10564 Paths through the Hourglass 题意: 要求从第一层走到最下面一层,只能往左下或右下走 问有多少条路径之和刚好等于S? 如果有的话,输出字典序最小的路径 ...

  6. UVA 11404 Palindromic Subsequence[DP LCS 打印]

    UVA - 11404 Palindromic Subsequence 题意:一个字符串,删去0个或多个字符,输出字典序最小且最长的回文字符串 不要求路径区间DP都可以做 然而要字典序最小 倒过来求L ...

  7. UVA&&POJ离散概率与数学期望入门练习[4]

    POJ3869 Headshot 题意:给出左轮手枪的子弹序列,打了一枪没子弹,要使下一枪也没子弹概率最大应该rotate还是shoot 条件概率,|00|/(|00|+|01|)和|0|/n谁大的问 ...

  8. UVA计数方法练习[3]

    UVA - 11538 Chess Queen 题意:n*m放置两个互相攻击的后的方案数 分开讨论行 列 两条对角线 一个求和式 可以化简后计算 // // main.cpp // uva11538 ...

  9. UVA数学入门训练Round1[6]

    UVA - 11388 GCD LCM 题意:输入g和l,找到a和b,gcd(a,b)=g,lacm(a,b)=l,a<b且a最小 g不能整除l时无解,否则一定g,l最小 #include &l ...

随机推荐

  1. Tunnel Warfare(树状数组+二分)

    http://poj.org/problem?id=2892 题意:输入n,m.n代表数轴的长度,m代表操作数. D x: 摧毁点x Q x: 询问村庄x最左与最右没有被摧毁的点的距离 R  :恢复最 ...

  2. sdut1269 走迷宫(dfs)

    http://acm.sdut.edu.cn/sdutoj/problem.php?action=showproblem&problemid=1269 连着做了三个基本的dfs,终于弄懂了搜索 ...

  3. bzoj 3172 单词

    3172: [Tjoi2013]单词 Time Limit: 10 Sec  Memory Limit: 512 MBSubmit: 3937  Solved: 1912[Submit][Status ...

  4. Nightmare --- 炸弹时间复位

    题目大意: 该题为走迷宫,其条件有如下6个: 1, 迷宫用二维数组来表示: 2, 人走动时不能越界,不能在墙上走: 3, 当走到出口时,若剩余时间恰好为0,则失败: 4, 找到炸弹复位装置,若剩余时间 ...

  5. ROS-URDF-活动关节

    前言:介绍活动关节,并使机器人活动起来. 参考自:http://wiki.ros.org/urdf/Tutorials/Building%20a%20Movable%20Robot%20Model%2 ...

  6. struts2OGNL表达式(三)

    OGNL表达式 OGNL对象试图导航语言.${user.addr.name}这种写法就叫对象试图导航.Struts框架使用OGNL作为默认的表达式语言 OGNL不仅仅可以试图导航,支持比EL表达式更加 ...

  7. 关于Core里的 StartUp里的方法的理解。

    public class Startup { public Startup(IConfiguration configuration) { Configuration = configuration; ...

  8. 用JSP实现动态交互

    一.什么是JSP? 1.在HTML中嵌入Java脚本代码 2.由应用服务器中的JSP引擎来编译和执行嵌入的Java脚本代码 3.然后将生成的整个页面信息返回给客户端   二.为什么需要基于B/S技术的 ...

  9. js手机移动端选择插件 mobileSelect.js

    一.mobileSelect获取方法 mobileSelect支持单选.多级联动.自定义回调函数.二次渲染.最新版本下载地址[2017-09-21更新]: https://github.com/onl ...

  10. AdminLTE框架基础布局使用

    boxbox-solid:去掉顶部边框线box-headerwith-border:添加头底部边框线 按钮:—— btn btn-default 默认<div class="btn-g ...