日常訓練 school

2022-05-31 04:48:12 字數 2064 閱讀 3870

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 接下來...