三分太難了、於是來寫線段樹、
、維護四個點之間的連通性、、然後就沒了。
然後把n定義成bool、狂wa不止、
以後資料結構題不寫對拍就不要交!
你一定要足夠的相信你的程式很多地方都是錯的、
碼:
#include#includeusing namespace std;
#define zuo o<<1,l,mid
#define you o<<1|1,mid+1,r
#define n 100005
bool lt[n<<2][5][5],tu[n][3],tu2[n],yici,lin[5][5],lin2[5][5],zj[5][5],sd[5][5],hn[5][5];
int a,b,x,y,n;
char ch[5555];
void up(int o,int mid)
void jian(int o,int l,int r)
int mid=(l+r)>>1;
jian(zuo);
jian(you);
up(o,mid);}
void gai(int o,int l,int r)
int mid=(l+r)>>1;
if(a<=mid) gai(zuo);
if(b>mid) gai(you);
up(o,mid);}
void wen(int o,int l,int r)
for(i=1;i<=4;i++)
for(j=1;j<=4;j++)
lin2[i][j]=0;
//判斷24聯通
if(lt[o][2][4])lin2[2][4]=lin2[4][2]=1;
if(tu[l-1][1]&&tu[l-1][2]&<[o][2][1]&&lin[2][4]&<[o][3][4]) lin2[2][4]=lin2[4][2]=1;
//判斷1 3聯通
if(lin[1][3])lin2[1][3]=lin2[3][1]=1;
if(tu[l-1][1]&&tu[l-1][2]&&lin[2][1]&<[o][1][3]&&lin[3][4]) lin2[1][3]=lin2[3][1]=1;
//判斷1 2聯通
if(tu[l-1][1]&&lin[1][2]&<[o][1][2])lin2[1][2]=lin2[2][1]=1;
if(tu[l-1][2]&&lin[1][4]&<[o][3][2])lin2[1][2]=lin2[2][1]=1;
//判斷1 4聯通
if(tu[l-1][1]&&lin[1][2]&<[o][1][4])lin2[1][4]=lin2[4][1]=1;
if(tu[l-1][2]&&lin[1][4]&<[o][4][3])lin2[1][4]=lin2[4][1]=1;
//判斷2 3聯通
if(tu[l-1][1]&&lin[3][2]&<[o][1][2])lin2[2][3]=lin2[3][2]=1;
if(tu[l-1][2]&&lin[3][4]&<[o][3][2])lin2[2][3]=lin2[3][2]=1;
//判斷3 4聯通
if(tu[l-1][1]&&lin[3][2]&<[o][1][4])lin2[3][4]=lin2[4][3]=1;
if(tu[l-1][2]&&lin[3][4]&<[o][3][4])lin2[3][4]=lin2[4][3]=1;
for(i=1;i<=4;i++)
for(j=1;j<=4;j++)
lin[i][j]=lin2[i][j];
return;
}int mid=(l+r)>>1;
if(a<=mid)wen(zuo);
if(b>mid)wen(you);
}int main()
if(ch[0]=='c')
if(ch[0]=='a')
if(y==2&&yy==1)
if(y==2&&yy==2)
if(y==1&&yy==2)
if(ky)printf("y\n");
else printf("n\n"); }}
}
bzoj 1018 堵塞的交通
傳送門 這是一道好題,不容易想到線段樹和維護的量。分析題目,考慮聯通方式,發現只有3種,我一開始的想法是結構分塊,使用並查集維護,o 1 新增很自然,刪除的話就暴力重建塊內的並查集o sqrt n 查詢的時候仍然考慮並查集維護,求出關鍵點 上下左右4個 和他們之間的聯通性,數量級是o sqrt n ...
SHOI2008 堵塞的交通
有一篇超級棒的線段樹 大力分類討論的題解!戳我 可是我還是不會寫這個做法qwqwqwq 這裡提供線段樹分治的寫法。感覺比較不需要智商,就是跑的有點慢了。include include include include include include include include define max...
SHOI2008 堵塞的交通
這裡提供幾種不用腦子的演算法 當然是離線的 text 記下每條邊的刪除時間,用 text 維護最大生成樹,每次加進一條邊時,跟原來那條鏈上的做比較,刪除那條刪除時間最短的邊即可。線段樹分治 這個演算法將每條邊的加入和刪除時間加入到線段樹中,所以在遍歷到葉子節點時,那個時刻存在的邊都已經在並查集上了,...