bzoj1202 狡猾的商人

2021-06-21 00:55:53 字數 623 閱讀 6839

如果這個賬本是真的話,那麼對於乙個s,t,在圖上,兩個點之間任意一條路徑的長度都必須相等,不然這個賬本就不是真的。

用並查集在維護這個資訊,也就是字首和,字首和就是前i個月收入的錢,那麼對於任意一行資料  s  t  v   都有 sum[s] - sum[t] = v

然後在並查集的時候,查詢父親節點的時候,將sum值累加起來。

然後再讀入的時候進行一下判斷就可以了

如果對於 fa[s] != fa[t],那麼先合併這2個點,然後sum[fa[x]] = sum[t] - sum[s] + v; 

#include#include#includeusing namespace std;

int w,n,m,fa[101],v[101];

bool flag;

int find(int x)

void work(int x,int y,int w)

else if(v[y]-v[x]!=w)flag=true;

}int main()

if(flag)printf("false\n");

else printf("true\n");

} return 0;

}

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

BZOJ1202 狡猾的商人

知識點 差分約束 難點 找到正確的不等關係然後建圖 關於建圖 一段時間內的收入及字首和,l r天的收入用字首和表達即sum r sum l 1 對於每乙個賬本,如果它是假的,可能會出現這種情況 sum 1,2 1,sum 2,3 1,sum 1,3 1 顯然 第一天第二天第三天收入為2,與sum 1...