BZOJ 1018 堵塞的交通 線段樹維護連通性

2022-07-12 18:51:10 字數 2256 閱讀 3357

$ \rightarrow $戳我進bzoj原題

time limit: 3 sec $ \quad $ memory limit: 162 mb有一天,由於某種穿越現象作用,你來到了傳說中的小人國。

小人國的布局非常奇特,整個國家的交通系統可以被看成是乙個$ 2 $ 行 $ c $ 列的矩形網格,

網格上的每個點代表乙個城市,相鄰的城市之間有一條道路,所以總共有 $ 2 \times c $個城市和 $ 3 \times c−2 $ 條道路。

小人國的交通狀況非常槽糕。有的時候由於交通堵塞,兩座城市之間的道路會變得不連通,直到擁堵解決,道路才會恢復暢通。

初來咋到的你決心毛遂自薦到交通部某份差事,部長聽說你來自乙個科技高度發達的世界,

喜出望外地要求你編寫乙個查詢應答系統,以挽救已經病入膏肓的小人國交通系統。

小人國的交通部將提供一些交通資訊給你,你的任務是根據當前的交通情況回答查詢的問題。交通資訊可以分為以下幾種格式:

注:$ r_i $ 表示行數,$ c_i $ 表示列數,$ 1≤ri≤2,1≤ci≤c1 \leq r_i \leq 2, 1 \leq c_i \leq c $ 。

第一行只有乙個整數 $ c $ ,表示網格的列數。

接下來若干行,每行為一條交通資訊,以單獨的一行exit作為結束。我們假設在一開始所有的道路都是堵塞的。

我們保證 $ c $ 小於等於 $ 100000 $ ,資訊條數小於等於 $ 100000 $ 。

對於每個查詢,輸出乙個y或n。

2 

open 1 1 1 2

open 1 2 2 2

ask 1 1 2 2

ask 2 1 2 2

exit

y

n

題解:judgeonline/upload/201604/sol(4).rar

#include#include#include#includeusing namespace std;

#define n 200005

inline int read()

int n;

char opt[5];

struct treet[n<<2];

int a[n<<2][2];

void build(int o,int l,int r)

int mid=l+r>>1;

build(o<<1,l,mid); build(o<<1|1,mid+1,r);

}void pushup(int o,int l,int r)

void updata_row(int o,int l,int r,int x,int p)

int mid=l+r>>1;

if(x>mid) updata_row(o<<1|1,mid+1,r,x,p);

else updata_row(o<<1,l,mid,x,p);

pushup(o,l,r);

}void updata_column(int o,int l,int r,int x,int c,int p)

int mid=l+r>>1;

if(x>mid) updata_column(o<<1|1,mid+1,r,x,c,p);

else updata_column(o<<1,l,mid,x,c,p);

pushup(o,l,r);

}void work(int c1,int r1,int c2,int r2,int p)

}tree query_direct(int o,int l,int r,int l,int r)

}bool query(int c1,int r1,int c2,int r2)

tree tmp=query_direct(1,1,n,c1,c2);

if(tmp.e[r1][r2]) return 1;

tree l=query_direct(1,1,n,1,c1);

tree r=query_direct(1,1,n,c2,n);

if(l.e[2][1] && tmp.e[r1^1][r2]) return 1;

if(r.e[2][0] && tmp.e[r1][r2^1]) return 1;

if(l.e[2][1] && r.e[2][0] && tmp.e[r1^1][r2^1]) return 1;

return 0;

}int main()

return 0;

}

bzoj 1018 堵塞的交通

傳送門 這是一道好題,不容易想到線段樹和維護的量。分析題目,考慮聯通方式,發現只有3種,我一開始的想法是結構分塊,使用並查集維護,o 1 新增很自然,刪除的話就暴力重建塊內的並查集o sqrt n 查詢的時候仍然考慮並查集維護,求出關鍵點 上下左右4個 和他們之間的聯通性,數量級是o sqrt n ...

SHOI2008 堵塞的交通 線段樹

傳送門 線段樹三連。這是一道讓人誤解為水題的線段樹題。實則讓我想罵出題人出了這麼道大毒瘤。題意 維護2 n的網格區域中點的連通性。題解 線段樹維護連通性。把上下兩個城市看作線段樹中的乙個點 合併兩個區間時,只看這兩個區間的左,右端點,更新合併區間的連通性。這個很好想,不過實現起來 嘿嘿嘿 記錄橫向的...

SHOI2008 堵塞的交通(線段樹維護聯通性)

題目 2行c列個點,開始時互不聯通,支援給同一列或著同一行相鄰的兩個點連邊,和詢問兩個點能否在乙個聯通塊裡。1 c 100000 1 運算元 100000 題解線段樹的又乙個騷操作。我們把2 2的4個點看作線段樹上的葉子結點。其他節點就是其兒子的合併 葉子結點的父親表示2 4八個點,然後是2 8,2...