HNOI2005 狡猾的商人

2022-03-27 05:57:06 字數 935 閱讀 1287

加權並查集

由於給出資訊的是一些乙個區間的和為多少,我們顯然並不好處理出每乙個點應該為多少,這我們根本做不到

但是我們想一下,如果要求乙個區間\([l,r]\)的和,那麼我們是不是可以利用字首和\(p[r]-p[l-1]\)得到

所以一組資訊\(l,r,k\)其實可以利用字首和寫成\(p[r]-p[l-1]=k\)的形式

於是我們可以考慮將這些這字首和的資訊利用並查集來合併,同時我們還要儲存乙個\(s[i]\)表示\(p[fa[i]]-p[i]\)為多少,即根節點與每個點的差為多少

如果對於一條資訊\(l,r,k\),\(l-1,r\)已經有了關係,即\(l-1\)和\(r\)在乙個並查集裡,我們就看一看\(p[r]-p[l-1]\)即\(p[root]-p[l-1]-(p[root]-p[r])=s[x-1]-s[y]\)是否等於\(k\)就好了

如果\(l-1\)與\(r\)沒有關係,那麼就將這兩個並查集合並一下,這裡也要推一下式子(剛上來這裡的式子推錯了,真尷尬)

之後就是乙個加權並查集的板子了

#include#include#include#define re register

#define maxn 101

int fa[maxn],s[maxn];

inline int read()

while(c>='0'&&c<='9')

x=(x<<3)+(x<<1)+c-48,c=getchar();

return x*r;

}int find(int x)

int n,m,t;

int main()

else

if(!opt) break;

}if(!opt) puts("false");

else puts("true");

}return 0;

}

HNOI2005 狡猾的商人

刁奼接到乙個任務,為稅務部門調查一位商人的賬本,看看賬本是不是偽造的。賬本上記錄了n個月以來的收入情況,其中第i 個月的收入額為ai i 1,2,3 n 1,n 當 ai大於0時表示這個月盈利ai 元,當 ai小於0時表示這個月虧損ai 元。所謂一段時間內的總收入,就是這段時間內每個月的收入額的總和...

HNOI2005狡猾的商人

傳送門 題目意思很簡單,意思是說給你一些區間和,要你判斷這些區間和是否合法。開始只想到了差分約束的方法,就是搞成字首和的形式 su m r sum l 1 w 且 su m r sum l 1 w 這樣利用spfa建圖,利用三角形不等式,即dis v dis x w i 每個條件建出sum r su...

HNOI2005 狡猾的商人

hnoi2005 狡猾的商人 time limit 10 sec memory limit 162 mb description 刁奼接到乙個任務,為稅務部門調查一位商人的賬本,看看賬本是不是偽造的。賬本上記錄了n個月以來的收入情況,其中第i 個月的收入額為ai i 1,2,3 n 1,n 當 ai...