Description

众所周知,家离学校很远。于是,每天算准了时间出发,以保证能在上课铃响前 秒到达学校。
不幸的是,市最近正在修路。这就导致有些路可能无法通行,因而可能导致迟到。
不打算改变他的出发时间,现在他告诉你他通过每一条路的时间,他想要知道如果某条路被维修了,那么他是否能避免迟到?

Input

第一行输入两个正整数,分别表示点数(路口)和边数(路)。
第二行输入两个正整数,表示家标号为,学校标号为
接下来行,每行三个整数,表示有一条连接的道路,走过该路所需的时间为
接下来一个整数,表示询问的个数。
最后行,每行一个正整数,表示询问若第条边正在维修,是否能按时到校。

Output

输出行。
对于每一个询问,若能准时到校输出一行一个字符串,否则输出.

(字符串严格匹配,不含双引号)

Sample Input

8 11

1 8

1 2 3

1 3 1

2 3 1

2 4 5

2 5 1

4 5 4

3 5 2

5 6 4

6 7 5

6 8 2

7 8 5

5

2

3

8

4

10

Sample Output

No
Yes
No
Yes
No

HINT

,保证源点到任意点的最短路长度不超过

Solution

先求出最短路的副图.如果一条边是副图的割边,那么无法避免迟到.

  1. #include<cmath>
  2. #include<ctime>
  3. #include<stack>
  4. #include<queue>
  5. #include<cstdio>
  6. #include<vector>
  7. #include<cstring>
  8. #include<cstdlib>
  9. #include<iostream>
  10. #include<algorithm>
  11. #define N 40005
  12. #define M 400005
  13. using namespace std;
  14. typedef long long ll;
  15. struct graph{
  16. int nxt,to,n;ll w;
  17. }e[M],e1[M];
  18. ll dis[N];
  19. int g[N],g1[N],dfn[N],low[N],n,m,s,t,cnt;
  20. bool b[M],f[N],inq[N];
  21. queue<int> q;
  22. inline int read(){
  23. int ret=0;char c=getchar();
  24. while(!isdigit(c)) c=getchar();
  25. while(isdigit(c)){
  26. ret=(ret<<1)+(ret<<3)+c-'0';
  27. c=getchar();
  28. }
  29. return ret;
  30. }
  31. inline void adde(int i,int x,int y){
  32. e1[++cnt].nxt=g1[x];g1[x]=cnt;
  33. e1[cnt].to=y;e1[cnt].n=i;
  34. }
  35. inline void addedge(int i,int x,int y,int z){
  36. e[++cnt].nxt=g[x];g[x]=cnt;
  37. e[cnt].to=y;e[cnt].w=(ll)(z);e[cnt].n=i;
  38. }
  39. inline void spfa(int u){
  40. for(int i=1;i<=n;++i)
  41. dis[i]=(ll)(1e+7);
  42. q.push(u);dis[u]=0;inq[u]=true;
  43. while(!q.empty()){
  44. u=q.front();q.pop();inq[u]=false;
  45. for(int i=g[u];i;i=e[i].nxt)
  46. if(dis[e[i].to]<0||dis[u]+e[i].w<dis[e[i].to]){
  47. dis[e[i].to]=dis[u]+e[i].w;
  48. if(!inq[e[i].to]){
  49. q.push(e[i].to);inq[e[i].to]=true;
  50. }
  51. }
  52. }
  53. }
  54. inline void bfs(int u){
  55. memset(inq,0,sizeof(inq));
  56. cnt=0;q.push(u);inq[u]=true;
  57. while(!q.empty()){
  58. u=q.front();q.pop();
  59. for(int i=g[u];i;i=e[i].nxt)
  60. if(dis[e[i].to]+e[i].w==dis[u]){
  61. adde(e[i].n,e[i].to,u);adde(e[i].n,u,e[i].to);
  62. if(!inq[e[i].to]){
  63. q.push(e[i].to);inq[e[i].to]=true;
  64. }
  65. }
  66. }
  67. }
  68. inline void tarjan(int u,int f){
  69. dfn[u]=low[u]=++cnt;
  70. for(int i=g1[u];i;i=e1[i].nxt)
  71. if(!dfn[e1[i].to]){
  72. tarjan(e1[i].to,u);
  73. low[u]=min(low[u],low[e1[i].to]);
  74. if(low[e1[i].to]>dfn[u]) b[e1[i].n]=true;
  75. }
  76. else if(e1[i].to!=f)
  77. low[u]=min(low[u],dfn[e1[i].to]);
  78. }
  79. inline void init(){
  80. n=read();m=read();
  81. s=read();t=read();
  82. for(int i=1,x,y,z;i<=m;++i){
  83. x=read();y=read();z=read();
  84. addedge(i,x,y,z);addedge(i,y,x,z);
  85. }
  86. spfa(s);bfs(t);tarjan(s,0);
  87. int q=read();
  88. while(q--){
  89. if(b[read()]) puts("No");
  90. else puts("Yes");
  91. }
  92. }
  93. int main(){
  94. freopen("school.in","r",stdin);
  95. freopen("school.out","w",stdout);
  96. init();
  97. fclose(stdin);
  98. fclose(stdout);
  99. return 0;
  100. }

[日常训练]school的更多相关文章

  1. 「日常训练」ZgukistringZ(Codeforces Round #307 Div. 2 B)

    题意与分析(CodeForces 551B) 这他妈哪里是日常训练,这是日常弟中弟. 题意是这样的,给出一个字符串A,再给出两个字符串B,C,求A中任意量字符交换后(不限制次数)能够得到的使B,C作为 ...

  2. 「日常训练」 Fire!(UVA-11624)

    与其说是训练不如说是重温.重新写了Java版本的代码. import java.util.*; import java.math.*; import java.io.BufferedInputStre ...

  3. 「日常训练」COMMON 约数研究(HYSBZ-1968)

    题意与分析 感谢https://www.cnblogs.com/Leohh/p/7512960.html的题解.这题话说原来不在我的训练范围,正好有个同学问我,我就拿来做做.数学果然不是我擅长的啊,这 ...

  4. 「日常训练」 Mike and Fun (CFR305D2B)

    题意(CodeForces 548B) 每次对01矩阵中的一位取反,问每次操作后,单列中最长连续1的长度. 分析 非常非常简单,但是我当时训练的时候WA了四次...无力吐槽了,人间 不值得.jpg 代 ...

  5. 「日常训练」Common Subexpression Elimination(UVa-12219)

    今天做的题目就是抱佛脚2333 懂的都懂. 这条题目干了好几天,最后还是参考别人的代码敲出来了,但是自己独立思考了两天多,还是有收获的. 思路分析 做这条题我是先按照之前的那条题目(The SetSt ...

  6. 集训队日常训练20181117 DIV2

    大佬们一顿操作猛如虎,拼命AC强啊 4262: 区间异或  Time Limit(Common/Java):1000MS/3000MS     Memory Limit:65536KByteTotal ...

  7. [日常训练]string

    Description 给定一个长度为$n$的字符串,串中的字符保证是前$k$个小写字母.你可以在字符串后再添加$m$个字符,使得新字符串所包含的不同的子序列数量尽量多.当然,前提是只能添加前$k$个 ...

  8. [日常训练]yayamao的神题

    Description $yayamao$是数学神犇,一天他在纸上计算起了$1/P$, 我们知道按照模拟除法可以得到准确解,例如$1/7=0.(142857),1/10=0.1(0)$.$yayama ...

  9. [日常训练]mod

    Description 给定$p_1,p_2,-,p_n,b_1,b_2,...,b_m$, 求满足$x\;mod\;p_1\;\equiv\;a_1,x\;mod\;p_2\;\equiv\;a_2 ...

  10. [日常训练]training

    Description 一条线上有栋楼,第栋楼有层,每层有1个价值为的物品. 可以花费1个单位时间完成以下3种移动: 1.在同一栋楼中向上或者向下走一层; 2.如果此刻在顶楼,可以通往1楼; 3.从当 ...

随机推荐

  1. BZOJ 2190: [SDOI2008]仪仗队

    2190: [SDOI2008]仪仗队 Time Limit: 10 Sec  Memory Limit: 259 MBSubmit: 2689  Solved: 1713[Submit][Statu ...

  2. MySQL迁移[转]

    http://dbarobin.com/2015/09/15/migration-of-mysql-on-different-scenes/ MySQL 迁移方案概览 MySQL 迁移无非是围绕着数据 ...

  3. 035医疗项目-模块三:药品供应商目录模块——供货商药品目录(批量)添加药品的功能---------Service

    这篇文章我们重点介绍Service层.因为Dao层就是用Gysypml逆向生成的Mapper就可以了.所以这里重点讲解Service层. 业务逻辑如下: 1:我们从前端页面传入有两个值:1:userg ...

  4. 深度学习(deep learning)

    最近deep learning大火,不仅仅受到学术界的关注,更在工业界受到大家的追捧.在很多重要的评测中,DL都取得了state of the art的效果.尤其是在语音识别方面,DL使得错误率下降了 ...

  5. Oracle 常用操作【02】数据库特性

    1. 导出 oracle 注释 -- 表明細+表注释+字段明细+字段注释 a.一个用户下的表明細+表注释+字段明细+字段注释 select ATC.OWNER, atC.TABLE_NAME, utc ...

  6. 前端Mvvm QC 上传了测试版

    QC是一个前端MVVM框架,适合用来构建复杂的业务逻辑 项目地址:https://github.com/time-go/qc 技术支持QQ群:330603020 QC特点: 1.良好的浏览器兼容性(兼 ...

  7. 一个用react+nodejs实现的笔记本小应用

    寒假回家产品经理一直叮嘱着要继续做学校团队的辣个项目,但是...,我到现在一点都还没做,而且还销声匿迹躲了起来藏了几天,是的我干了票大的,想把项目用一种新的架构实现了,所以这几天一直在偷偷摸摸的做一些 ...

  8. XML的解析和保存

    1.XML(extensible markup language;XML )  定义:,可以用来标记数据.定义数据类型,是一种允许用户对自己的标记语言进行定义的源语言.     XML语法规范:  标 ...

  9. android 颜色对照

    <table><tbody> <tr> <td bgcolor="#ffffff" width="30" height ...

  10. mailto: HTML e-mail 链接

    转载: http://www.haorooms.com/post/mailto_link_html 什么是mailto链接? mailto链接是一种html链接,能够设置你电脑中邮件的默认发送信息.但 ...