[日常训练]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.从当 ...
随机推荐
- Python的高级特性8:你真的了解类,对象,实例,方法吗
Python的高级特性1-7系列是本人从Python2过渡3时写下的一些个人见解(不敢说一定对),接下来的系列主要会以类级为主. 类,对象,实例,方法是几个面向对象的几个基本概念,其实我觉得很多人并不 ...
- zookeeper多节点配置
单机多节点模式 zookeeper解压, 放到 /opt/zookeeper/ 下, 同目录再放一个 server1目录, 下面建data和log两个目录用于存放数据和日志 zoo.cfg [milt ...
- Microsoft.Office.Interop.Excel, Version=12.0.0.0版本高于引用的程序集(已解决)
Microsoft.Office.Interop.Excel, Version=12.0.0.0版本高于引用的程序集(已解决) 论坛里的帮助:http://bbs.csdn.net/topics/39 ...
- perl 下使用非root用户安装模块
perl下安装模块可以使用cpan命令,但是通常我们不具有root用户权限,所以只能以sudo方式安装模块. 例如需要安装Net::SCP::Expect模块, 执行cpan Net::SCP::Ex ...
- ios蓝牙开发(三)ios连接外设的代码实现:手机app去读写蓝牙设备。
手机app去读写蓝牙设备....... 代码下载: 原文博客主提供Github代码连接,地址是:https://github.com/coolnameismy/demo ios连接外设的代码实现流程: ...
- C语言复习(1)
test.c #include <stdio.h> int main(){ printf("hello\n"); return 0; } 1.预处理阶段 由于在test ...
- Ajax与json在前后端中的细节解惑
ajax请求JSON Thinkphp中对是否为Ajax的判断,在TP3.2开发手册中有这么一段:“需要注意的是,如果使用的是ThinkAjax或者自己写的Ajax类库的话,需要在表单里面添加一个隐藏 ...
- Web端PHP代码函数覆盖率测试解决方案
1. 关于代码覆盖率 衡量代码覆盖率有很多种层次,比如行覆盖率,函数/方法覆盖率,类覆盖率,分支覆盖率等等.代码覆盖率也是衡量测试质量的一个重要标准,对于黑盒测试来说,如果你不确定自己的测试用例是否真 ...
- Log4net使用(二)
日志记录到根目录Log文件夹,文件夹中分LogError与LogInfo文件夹 web.config配置: <configSections> <section name=" ...
- 重叠(Overlapping) NAT
当内部网络也使用公网注册地址(或者是外网合法地址)时,如果仍使用标准的静态或者动态NAT转换,则可能使得转换的内网地址与外网中合法地址冲突,使数据包又返回到了本地网络,这肯定是不行的.这时我们就要使用 ...