SHOI2008 堵塞的交通traffic

2021-08-14 06:18:57 字數 1310 閱讀 5760

這是一道毒瘤題

只要線段樹維護乙個矩形的四個點的連通性即可

合併時請想清楚,要大討論一番

詢問有可能存在跨區間的聯通情況,只要把詢問的區間分成[1,l],[l,r],[r,n]再大討論一番即可

如果你不想討論或者討論出錯,你可以使用並查集,每次開並查集更新,這樣就不用大討論一番了,但是會慢,時間幾乎是兩倍。。。

像我這種不會討論的蒟蒻想到了後果斷用並查集

自我感覺**還是比較短的

# include 

# define rg register

# define il inline

# define zsybeatme 666

# define fill(a, b) memset(a, b, sizeof(a))

using namespace std;

typedef

long

long ll;

const

int _(4e6 + 10), inf(2e9);

il ll read()

int n, gg;

struct data

} t[_], f[_];

int fa[4];

il int find(rg int x)

il void link(rg int x, rg int y)

il bool ok(rg int x, rg int y)

il void update(rg data &a)

il data merge(rg data a, rg data b)

il void modify(rg int x, rg int l, rg int r, rg int

id, rg int d, rg bool v)

rg int mid = (l + r) >> 1;

if(id

<= mid) modify(x << 1, l, mid, id, d, v);

else modify(x << 1 | 1, mid + 1, r, id, d, v);

t[x] = merge(t[x << 1], t[x << 1 | 1]);

}il data query(rg int x, rg int l, rg int r, rg int l, rg int r)

il bool calc(rg int a, rg int b, rg int c, rg int d)

int main(rg int argc, rg char *argv)

}return

0;}

SHOI2008 堵塞的交通

有一篇超級棒的線段樹 大力分類討論的題解!戳我 可是我還是不會寫這個做法qwqwqwq 這裡提供線段樹分治的寫法。感覺比較不需要智商,就是跑的有點慢了。include include include include include include include include define max...

SHOI2008 堵塞的交通

這裡提供幾種不用腦子的演算法 當然是離線的 text 記下每條邊的刪除時間,用 text 維護最大生成樹,每次加進一條邊時,跟原來那條鏈上的做比較,刪除那條刪除時間最短的邊即可。線段樹分治 這個演算法將每條邊的加入和刪除時間加入到線段樹中,所以在遍歷到葉子節點時,那個時刻存在的邊都已經在並查集上了,...

SHOI2008 堵塞的交通

有一天,由於某種穿越現象作用,你來到了傳說中的小人國。小人國的布局非常奇特,整個國家的交通系統可 以被看成是乙個2行c列的矩形網格,網格上的每個點代表乙個城市,相鄰的城市之間有一條道路,所以總共有2c個 城市和3c 2條道路。小人國的交通狀況非常槽糕。有的時候由於交通堵塞,兩座城市之間的道路會變得不...