description
眾所周知,
家離學校很遠。於是,
每天算準了時間出發,以保證能在上課鈴響前
秒到達學校。
不幸的是,
市最近正在修路。這就導致有些路可能無法通行,因而可能導致
遲到。
不打算改變他的出發時間,現在他告訴你他通過每一條路的時間,他想要知道如果某條路被維修了,那麼他是否能避免遲到?
input
第一行輸入兩個正整數
,分別表示點數(路口)和邊數(路)。
第二行輸入兩個正整數
,表示家標號為
,學校標號為
。
接下來行,每行三個整數
,表示有一條連線
的道路,
走過該路所需的時間為
。
接下來乙個整數
,表示詢問的個數。
最後行,每行乙個正整數
,表示詢問若第
條邊正在維修,
是否能按時到校。
output
輸出行。
對於每乙個詢問,若
能準時到校輸出一行乙個字串
,否則輸出
.(字串嚴格匹配,不含雙引號)
sample input
8 11
1 81 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
8 sample output
no
yes
no
yes
nohint
$n\leq40000,m\leq400000$,保證源點到任意點的最短路長度不超過
。solution
先求出到
最短路的副圖.如果一條邊是副圖的割邊,那麼無法避免遲到.
#include#include#include
#include
#include
#include
#include
#include
#include
#include
#define n 40005
#define m 400005
using
namespace
std;
typedef
long
long
ll;struct
graphe[m],e1[m];
ll dis[n];
intg[n],g1[n],dfn[n],low[n],n,m,s,t,cnt;
bool
b[m],f[n],inq[n];
queue
q;inline
intread()
return
ret;
}inline
void adde(int i,int x,int
y)inline
void addedge(int i,int x,int y,int
z)inline
void spfa(int
u) }
}}inline
void bfs(int
u) }
}}inline
void tarjan(int u,int
f)
else
if(e1[i].to!=f)
low[u]=min(low[u],dfn[e1[i].to]);
}inline
void
init()
spfa(s);bfs(t);tarjan(s,0);
int q=read();
while(q--)
}int
main()
日常訓練 壓縮
巨大的文字往往令人頭疼,特別是文字內容有大量重複的情況下,巨大的文字不便於運輸和閱讀,於是我們提出了noip nonsense obivous index pattern 荒謬的顯然索引法 一種 有效的 壓縮文字的方法。noip壓縮後的格式很特別,乙個文字壓縮後由若干個單元組成,每個單元由3部分組成...
日常訓練 Tree
j 對於h u j 時間複雜度的證明也是比較經典了,每次列舉的是sz eu s zev 相當於每次從a,b 中各任選一點,它們的lc a 為 u 這樣的點對列舉不會重複,因此總的時間複雜度為o n2 include include include include include using name...
日常訓練 mod
給定 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,x mod p n equiv a n 的 x 對 b 1,b 2,b m 取模的結果.第一行兩個整數 n,m 接下來 n 行,每行有乙個整數 a i 接下來...