[日常训练]school
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
先求出到
最短路的副图.如果一条边是副图的割边,那么无法避免迟到.
#include<cmath>
#include<ctime>
#include<stack>
#include<queue>
#include<cstdio>
#include<vector>
#include<cstring>
#include<cstdlib>
#include<iostream>
#include<algorithm>
#define N 40005
#define M 400005
using namespace std;
typedef long long ll;
struct graph{
int nxt,to,n;ll w;
}e[M],e1[M];
ll dis[N];
int g[N],g1[N],dfn[N],low[N],n,m,s,t,cnt;
bool b[M],f[N],inq[N];
queue<int> q;
inline int read(){
int ret=0;char c=getchar();
while(!isdigit(c)) c=getchar();
while(isdigit(c)){
ret=(ret<<1)+(ret<<3)+c-'0';
c=getchar();
}
return ret;
}
inline void adde(int i,int x,int y){
e1[++cnt].nxt=g1[x];g1[x]=cnt;
e1[cnt].to=y;e1[cnt].n=i;
}
inline void addedge(int i,int x,int y,int z){
e[++cnt].nxt=g[x];g[x]=cnt;
e[cnt].to=y;e[cnt].w=(ll)(z);e[cnt].n=i;
}
inline void spfa(int u){
for(int i=1;i<=n;++i)
dis[i]=(ll)(1e+7);
q.push(u);dis[u]=0;inq[u]=true;
while(!q.empty()){
u=q.front();q.pop();inq[u]=false;
for(int i=g[u];i;i=e[i].nxt)
if(dis[e[i].to]<0||dis[u]+e[i].w<dis[e[i].to]){
dis[e[i].to]=dis[u]+e[i].w;
if(!inq[e[i].to]){
q.push(e[i].to);inq[e[i].to]=true;
}
}
}
}
inline void bfs(int u){
memset(inq,0,sizeof(inq));
cnt=0;q.push(u);inq[u]=true;
while(!q.empty()){
u=q.front();q.pop();
for(int i=g[u];i;i=e[i].nxt)
if(dis[e[i].to]+e[i].w==dis[u]){
adde(e[i].n,e[i].to,u);adde(e[i].n,u,e[i].to);
if(!inq[e[i].to]){
q.push(e[i].to);inq[e[i].to]=true;
}
}
}
}
inline void tarjan(int u,int f){
dfn[u]=low[u]=++cnt;
for(int i=g1[u];i;i=e1[i].nxt)
if(!dfn[e1[i].to]){
tarjan(e1[i].to,u);
low[u]=min(low[u],low[e1[i].to]);
if(low[e1[i].to]>dfn[u]) b[e1[i].n]=true;
}
else if(e1[i].to!=f)
low[u]=min(low[u],dfn[e1[i].to]);
}
inline void init(){
n=read();m=read();
s=read();t=read();
for(int i=1,x,y,z;i<=m;++i){
x=read();y=read();z=read();
addedge(i,x,y,z);addedge(i,y,x,z);
}
spfa(s);bfs(t);tarjan(s,0);
int q=read();
while(q--){
if(b[read()]) puts("No");
else puts("Yes");
}
}
int main(){
freopen("school.in","r",stdin);
freopen("school.out","w",stdout);
init();
fclose(stdin);
fclose(stdout);
return 0;
}
[日常训练]school的更多相关文章
- 「日常训练」ZgukistringZ(Codeforces Round #307 Div. 2 B)
题意与分析(CodeForces 551B) 这他妈哪里是日常训练,这是日常弟中弟. 题意是这样的,给出一个字符串A,再给出两个字符串B,C,求A中任意量字符交换后(不限制次数)能够得到的使B,C作为 ...
- 「日常训练」 Fire!(UVA-11624)
与其说是训练不如说是重温.重新写了Java版本的代码. import java.util.*; import java.math.*; import java.io.BufferedInputStre ...
- 「日常训练」COMMON 约数研究(HYSBZ-1968)
题意与分析 感谢https://www.cnblogs.com/Leohh/p/7512960.html的题解.这题话说原来不在我的训练范围,正好有个同学问我,我就拿来做做.数学果然不是我擅长的啊,这 ...
- 「日常训练」 Mike and Fun (CFR305D2B)
题意(CodeForces 548B) 每次对01矩阵中的一位取反,问每次操作后,单列中最长连续1的长度. 分析 非常非常简单,但是我当时训练的时候WA了四次...无力吐槽了,人间 不值得.jpg 代 ...
- 「日常训练」Common Subexpression Elimination(UVa-12219)
今天做的题目就是抱佛脚2333 懂的都懂. 这条题目干了好几天,最后还是参考别人的代码敲出来了,但是自己独立思考了两天多,还是有收获的. 思路分析 做这条题我是先按照之前的那条题目(The SetSt ...
- 集训队日常训练20181117 DIV2
大佬们一顿操作猛如虎,拼命AC强啊 4262: 区间异或 Time Limit(Common/Java):1000MS/3000MS Memory Limit:65536KByteTotal ...
- [日常训练]string
Description 给定一个长度为$n$的字符串,串中的字符保证是前$k$个小写字母.你可以在字符串后再添加$m$个字符,使得新字符串所包含的不同的子序列数量尽量多.当然,前提是只能添加前$k$个 ...
- [日常训练]yayamao的神题
Description $yayamao$是数学神犇,一天他在纸上计算起了$1/P$, 我们知道按照模拟除法可以得到准确解,例如$1/7=0.(142857),1/10=0.1(0)$.$yayama ...
- [日常训练]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 ...
- [日常训练]training
Description 一条线上有栋楼,第栋楼有层,每层有1个价值为的物品. 可以花费1个单位时间完成以下3种移动: 1.在同一栋楼中向上或者向下走一层; 2.如果此刻在顶楼,可以通往1楼; 3.从当 ...
随机推荐
- 蓝灯github地址
https://github.com/getlantern/lantern/ 闪电联盟蓝灯: http://bbs.sdbeta.com/read-htm-tid-556664.html
- java多线程系类:基础篇:05线程的等待与唤醒
概要 本章,会对线程等待/唤醒方法进行介绍.涉及到的内容包括:1. wait(), notify(), notifyAll()等方法介绍2. wait()和notify()3. wait(long t ...
- java多线程系类:基础篇:02常用的实现多线程的两种方式
本章,我们学习"常用的实现多线程的2种方式":Thread 和 Runnable.之所以说是常用的,是因为通过还可以通过java.util.concurrent包中的线程池来实现多 ...
- Java集合系列:-----------05LinkedList的底层实现
前面,我们已经学习了ArrayList,并了解了fail-fast机制.这一章我们接着学习List的实现类--LinkedList.和学习ArrayList一样,接下来呢,我们先对LinkedList ...
- [转]终于找到全annotation配置springMVC的方法了(事务不失效)
原文:http://icanfly.iteye.com/blog/778401 icanfly 写道 如果带上事务,那么用annotation方式的事务注解和bean配置,事务会失效,要将servic ...
- css3属性书写顺序
今天写了个小demo想要利用transition 和transform以及transition-delay来实现鼠标移上去的延时动画,结果发现不能实现transition的变化效果.调试后发现只有把 ...
- NOI2018准备Day19
5天没写. 伸展树 主席树 3到线段树模板题
- Java7并发编程实战(一) 线程的等待
试想一个情景,有两个线程同时工作,还有主线程,一个线程负责初始化网络,一个线程负责初始化资源,然后需要两个线程都执行完毕后,才能执行主线程 首先创建一个初始化资源的线程 public class Da ...
- .html 、.htm 、 .shtml 以及 .shtm 四种扩展名的文件区别
新增了一个分类,叫做 Personals,中文我把它解释成 "个人恶趣味",这里将记载一些对工作无关紧要,但是个人又一时有兴趣了解的东西. 今天要讲的是如题的 4 种扩展文件的区别 ...
- java中的URLConnection
*URLConnection是个抽象类,它有两个直接子类分别是HttpURLConnection和JarURLConnection.另外一个重要的类是URL,通常URL可以通过传给构造器一个Strin ...