BZOJ1202 狡猾的商人

2022-05-25 03:15:12 字數 931 閱讀 8167

知識點:差分約束、

難點:找到正確的不等關係然後建圖

關於建圖:

一段時間內的收入及字首和,l~r天的收入用字首和表達即sum[r]-sum[l-1];

對於每乙個賬本,如果它是假的,可能會出現這種情況:

sum[1,2]=1,sum[2,3]=1,sum[1,3]=1

顯然:第一天第二天第三天收入為2,與sum[1,3]=1矛盾,我們要做的就是找到這個矛盾的地方

然後有乙個顯然的建圖方法:sum[v]−sum[u−1]=c,sum[u-1]-sum[v]=−c。

然後跑spfa套模板即可

1 #include2 #include3 #include4 #include5 #include6

using

namespace

std;

7 inline int

read()

10while(isdigit(chr))

11return ans*f;

12 }const

int m=200005;queueq;

13int

head[m],ver[m],nxt[m],val[m],tot[m],t_t,t,n,m,x,y,z,ff,dis[m],vis[m];

14 inline void add(int x,int y,int z)

15#define y ver[i]

16 inline bool spfa(int x)

27 }return1;}

28#undef y

29int

main()

35if(ff) puts("

false");

36else puts("

true");

37 }return0;

38 }

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 ...