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

只好用动态规划了。。

DP【time】【city】表示在time时刻到达city的最迟出发时间,当然,在这个时间不一定到city。

转移方程挺简单,不说你也会。

 #include <iostream>
#include <cstdio>
#include <map>
#include <iomanip>
#include <string>
#include <cstring>
#include <algorithm>
using namespace std; const int MAXN=;
const int MAXM=;
const int inf=;
int head[MAXN];
struct e{
int u,v;
int depart,arrival;
int next;
}edge[MAXM];
int tot,n,m,limit;
int start_city,des_city;
string start,destin;
int timeh[][]; void addedge(int u,int v,int de,int ar){
edge[tot].u=u;
edge[tot].v=v;
edge[tot].depart=de;
edge[tot].arrival=ar;
edge[tot].next=head[u];
head[u]=tot++;
} void slove(){
for(int e=head[start_city];e!=-;e=edge[e].next){
if(edge[e].depart>=limit){
timeh[edge[e].v][edge[e].arrival]=edge[e].depart;
}
}
for(int i=;i<=;i++){
for(int j=;j<=n;j++){
if(timeh[j][i]!=-){
for(int e=head[j];e!=-;e=edge[e].next){
if(i<=edge[e].depart){
timeh[edge[e].v][edge[e].arrival]=max(timeh[edge[e].v][edge[e].arrival],timeh[j][i]);
}
}
}
}
}
for(int i=;i<=;i++){
if(timeh[des_city][i]!=-){
cout << "Departure " << setw() << setfill('');
cout << timeh[des_city][i] << " " << start << endl;
cout << "Arrival " << setw() << setfill('');
cout << i << " " << destin << endl;
return ;
}
}
cout << "No connection" << endl;
} int main(){
string station,pre,cur;
int cas=;int T,pretime,curtime,u,v,train;
scanf("%d",&T);
while(T--){
cas++; tot=;
memset(head,-,sizeof(head));
memset(timeh,-,sizeof(timeh));
map<string,int>city;
scanf("%d",&n);
for(int i=;i<=n;i++){
cin>>station;
city[station]=i;
}
scanf("%d",&train);
while(train--){
scanf("%d",&m);
for(int i=;i<=m;i++){
cin>>curtime>>cur;
if(i>){
u=city[pre];
v=city[cur];
addedge(u,v,pretime,curtime);
}
pre=cur;
pretime=curtime;
}
}
cin>>limit>>start>>destin;
start_city=city[start]; des_city=city[destin];
cout << "Scenario " << cas << endl;
slove();
cout << endl;
}
return ;
}

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. B4010 菜肴制作 拓扑排序(附随机跳题代码)

    今天写了一个自己的随机跳题小程序,第一次试发现跳的全是不可做题,但是在周围我一眼看见了这个题,不能说一眼看出来,但是也是比较有思路,所以就做他了! 做得比较顺利,做完之后美滋滋,突然发现样例第三组过不 ...

  2. LeetCode.3-最长无重复字符子串(Longest Substring Without Repeating Characters)

    这是悦乐书的第341次更新,第365篇原创 01 看题和准备 今天介绍的是LeetCode算法题中Medium级别的第2题Longest Substring Without Repeating Cha ...

  3. BZOJ 1877 拆点费用流

    思路: 呃  水题不解释 行么,, //By SiriusRen #include <queue> #include <cstdio> #include <cstring ...

  4. C# 多线程系列(三)

    线程池 创建线程需要时间,如果有不同的小任务要完成,就可以事先创建许多线程,在应完成这些任务时发出请求.这个线程数最好在需要更多线程时增加,在需要释放资源时减少. 不需要自己创建这样的一个列表.该列表 ...

  5. Laravel5.1学习笔记5 请求

    HTTP 请求 #取得请求实例 #基本的请求信息 #PSR-7 请求 #取出输入数据 #旧的输入 #Cookies #文件 #取得请求实例(此部分文档5.1完全重写,注意) 要通过依赖注入获取当前HT ...

  6. 2.0 Linux系统的安装之Fedora安装单系统(2)

    2.0 Linux系统的安装之Fedora安装单系统(2) *Linux系统的安装之Fedora安装单系统 恐怕最好装的系统就是Linux系统了,或者与Windows并列.此篇教程为Fedora的单系 ...

  7. Excel常用的小技巧

    1.Excel如何实现单元格内轻松换行:按住ALT+enter就可以了. 2.Excel固定表头:在“视图”>冻结窗口>冻结首行. 3.防止电脑突然断电,导致正在编辑的Excel数据丢失, ...

  8. MySQL 优化之 index_merge (索引合并)

    深入理解 index merge 是使用索引进行优化的重要基础之一.理解了 index merge 技术,我们才知道应该如何在表上建立索引. 1. 为什么会有index merge 我们的 where ...

  9. jQuery的基本概念与高级编程

    年创建的一个年月面世的1.5.2版本.作为一个JavaScript库,jQuery极大程度上解决了浏览器的兼容性问题,能够在IE 6.0 +.FF 2.0 +.Safari 3.0 +.Opera 9 ...

  10. NOPI读取Word模板并保存

    安装NPOI 可以在 程序包管理器控制台中输入 PM> Install-Package NPOI 会下载最新版本NPOI ----------------------------引用了NPOI- ...