bzoj 1202 狡猾的商人

2022-06-01 10:06:06 字數 738 閱讀 6583

這個題一開始以為是線性規劃,但實際上是類似用並查集維護連通資訊的題目。

我們先給t+1,這樣[s,t]的區間就可以連起來了,那麼只要來了一組[s,t]曾經連通過,並且維護的區間值和原來不一樣,那麼一定是假的。

那麼怎麼維護區間值呢,我們合併的時候,把t的父親連到s的父親上,在t的父親上存乙個t的父親到s的父親的區間值也就是:

g[ft]=g[s]+z-g[t];

路徑壓縮的時候,同時更新g的值,這裡注意乙個細節:先路徑壓縮,在用g[f[i]]更新g[i]值,我在這裡一直wa。

view code

1 #include2 #include3 #include4 #include5 #include6

#define maxn 10000

7#define inf 2147483646

8using

namespace

std;

9int

f[maxn],g[maxn];

10int

n,m,p;

1112 inline int find(int

i)13

1920

intmain()

2141

if (ans) printf("

true\n");

42else printf("

false\n");

43}44return0;

45}4647

bzoj1202 狡猾的商人

如果這個賬本是真的話,那麼對於乙個s,t,在圖上,兩個點之間任意一條路徑的長度都必須相等,不然這個賬本就不是真的。用並查集在維護這個資訊,也就是字首和,字首和就是前i個月收入的錢,那麼對於任意一行資料 s t v 都有 sum s sum t v 然後在並查集的時候,查詢父親節點的時候,將sum值累...

bzoj1202 狡猾的商人

time limit 10 sec memory limit 162 mb submit 3569 solved 1717 submit status discuss 刁奼接到乙個任務,為稅務部門調查一位商人的賬本,看看賬本是不是偽造的。賬本上記錄了n個月以來的收入情況,其中第i 個月的收入額為ai...

BZOJ 1202 狡猾的商人

先處理成字首和關係,然後可以很明顯得看得出這是乙個差分約束。那麼就是最短路問題了。順便複習了一下spfa加slf優化是怎麼寫的,也學習到了另乙個stl deque雙向佇列。include include include include include include include include ...