题意:http://www.cnblogs.com/yylogo/archive/2011/06/05/SGU-103.html

分析:比通常的最短路问题多了个限制条件,即每个路口的颜色必须相同时才能通过,否则需要等待。不难发现,路口的颜色是与当前已经花费的时间有关。于是可以构造一个函数,根据当前所用时间来计算某个路口的颜色,以及下一次变色所需时间。

利用该函数可以计算出当前两个路口的颜色,看其是否相同。如果不同,则再看其下一次变色所需时间是否相同,若相同,则仍然无法通过,再计算下下次变色时间,若仍相同,则该两个路口的颜色将一直相反,即无法相通。这里可以画图理解。也就是说,最多需要循环3次来判断两个路口颜色是否相同。

另外此题还需注意输入时若用scanf读取字符,需加上getchar()吸收回车,不然会RE。

#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
#define inf 0x3f3f3f3f
#define N 305
struct P
{char c;int r,tb,tp;
}p[N];
int mp[N][N],d[N],pre[N];
bool v[N];
char color(int i,int d,int &t)  //返回颜色以及下次变色的时刻
{if(p[i].r>d){t=p[i].r-d;return p[i].c;}int x=d-p[i].r;x=x%(p[i].tb+p[i].tp);if(p[i].c=='P'){if(x<p[i].tb) { t=p[i].tb-x;return 'B';}else {t=p[i].tb+p[i].tp-x;return 'P';}}else{if(x<p[i].tp){t=p[i].tp-x;return 'P';}else {t=p[i].tb+p[i].tp-x;return 'B';}}
}
int wait(int a,int b,int d)
{int i,t1,t2,t=0;for(i=1;i<=3;++i){if(color(a,d,t1)==color(b,d,t2)) return t;t+=min(t1,t2);d+=min(t1,t2);}return inf;
}
int Dijkstra(int s,int e,int n)
{int j,i;for(i=1;i<=n;++i) d[i]=inf;d[s]=0;for(i=1;i<n;++i){int mi=inf,u=s;for(j=1;j<=n;++j)if(!v[j]&&d[j]<mi){u=j;mi=d[j];}v[u]=1;for(j=1;j<=n;++j)if(!v[j]&&mp[u][j]<inf){int t=wait(j,u,d[u]);if(d[u]+mp[u][j]+t<d[j]){d[j]=d[u]+mp[u][j]+t;pre[j]=u;}}}return d[e];
}
void output(int s,int e)
{if(s==e) {printf("%d",s);return;}output(s,pre[e]);printf(" %d",e);
}
int main()
{int n,m,s,e,a,b,c,ans,i;scanf("%d%d%d%d",&s,&e,&n,&m);getchar();memset(mp,inf,sizeof(mp));for(i=1;i<=n;++i) {scanf("%c%d%d%d",&p[i].c,&p[i].r,&p[i].tb,&p[i].tp);getchar();}for(i=1;i<=m;++i) {scanf("%d%d%d",&a,&b,&c);mp[a][b]=mp[b][a]=c;}ans=Dijkstra(s,e,n);if(ans==inf) puts("0");else{printf("%d\n",ans);output(s,e);puts("");}return 0;
}

SGU 103 Traffic Lights (最短路)相关推荐

  1. SGU 103 Traffic Lights(最短路)

    这题不错,是一个最短路,但是中间有一个限制条件,就是等待时间 首先先看一下为什么仍然满足最短路 因为最短路肯定是每个结点求出最早到达的时间,那么其实不管有没等待,从队头取出去转移的肯定是最早的时间,仍 ...

  2. [SGU 103] Traffic Lights [最短路]

    现在给你一个城市网络,求从某点到某点的最短路.每个点上都有一个红绿灯,仅有红绿两种颜色,按照某个周期切换,尽在边的两个端点的灯同色时,这条边才可走. 直接用最短路算法即可,走某条路径之前要加上的等待灯 ...

  3. 【SGU】103. Traffic Lights 最短路

    传送门:[SGU]103. Traffic Lights 题目大意: 在一个N个点M条边的城市里,每个点上有一个交通灯,交通灯亮B.P颜色,在离开始r的时间内交通灯会亮c颜色(c为B.P中的一种),然 ...

  4. SGU 103 Traffic Lights【最短路】

    题目链接: http://acm.hust.edu.cn/vjudge/problem/visitOriginUrl.action?id=16530 题意: 给定每个点最初的颜色,最初颜色持续时间,以 ...

  5. SGU 103 Traffic Lights

    http://acm.sgu.ru/problem.php?contest=0&problem=103 有条件限制的最短路问题,当且仅当点的颜色一样时可以通行否则需要等到符合条件时才可以通行. ...

  6. SGU 103 Traffic Lights 翻译 题解

    103. 交通灯 每个测试点:0.5s 内存限制:4096KB 在Dingilville市城市交通的安排很不寻常,公路连接着路口,在两个不同的路口之间最多有一条公路连接,没有公路会连接一个路口自身.正 ...

  7. CodeForces刷题C语言:Next Test、Spit Problem、Traffic Lights、Reconnaissance、Borze

    记录洛谷刷题C语言 一.Next Test 题面翻译 题面描述 给出 nnn 个互不相同的整数 aia_iai​ ,从小到大找第一个没有出现过的整数. 输入格式 第一行一个正整数 nnn ,之后是 n ...

  8. Traffic Lights(翻译)

    来源:https://codeforces.com/contest/29/problem/B Traffic Lights A car moves from point A to point B at ...

  9. signature=23e9377f593aff2d118917dcf0d9f6d0,Turning streams in the traffic lights system

    摘要: Observations of a currently functioning in Poland traffic lights system shows a need for it's mo ...

最新文章

  1. 求二叉树中第K层结点的个数
  2. 【C 语言】数组 ( 指针数组用法 | 自我结束能力 )
  3. 香蕉派(or 皮?)上手初体验 -- 外观鉴赏,安装,配置amp;总结
  4. 透传模式(透明传输SeriaNet)详解
  5. vSphere 6.5 Upgrade Considerations Part-3(vSphere 6.5升级注意事项第3部分)
  6. 杭电2112(SPFA)
  7. 为什么我坚持用Go语言做Web应用开发框架?
  8. Android内核开发 Linux C编程调用内核模块设备驱动
  9. 浏览器趋势2016年9月:浏览器大战结束了吗?
  10. eclipse配置https
  11. linux 心跳灯_Linux下信号灯的使用
  12. 怎样免费将多个pdf文件合并为一个
  13. 网页打印中,A4纸对应的像素值的设定和换算
  14. 解决:Jackson反序列化Java内部类失败(序列化后的识别码为LinkedHashMap,而非内部类本身)
  15. python VS matlab: reshape/max/matrix index等方法比较
  16. Yolov5 更改识别窗口大小
  17. 王阳明心学 量子物理_量子物理学论文的文本分类
  18. 2022跨考华中科技大学计算机学院学硕上岸经验分享
  19. Android系统判断CPU是32位还是64位
  20. 威哥android视频百度云,威哥带你手把手开发Android电商项目视频教程

热门文章

  1. Android-五子连珠(三)-自定义的view
  2. 2017前端招聘要求集合
  3. 互联网巨头造车三步走:资本布局、技术支持、亲自下场
  4. 洋节VS传统佳节 消费者:过中国人自己的节日 才真“潮”!
  5. 人工智能如何配合商业采购策略?
  6. 从init3 (或其他命令行模式返回到图形界面)
  7. 简单实现家庭记账程序
  8. HTML弧度文本,[js高手之路] html5 canvas系列教程 - 文本样式(strokeText,fillText,measureText,textAlign,textBaseline)...
  9. mc服务器经济系统,[经济]NyEconomy — 多经济系统 , 让你不局限于只有几种货币[1.8-1.12] - 服务端插件 - Minecraft(我的世界)中文论坛 -...
  10. 用手机+电脑GPRS无线上网