bzoj4229 動態樹 選擇

2021-08-17 18:03:57 字數 2456 閱讀 3781

4229: 選擇

time limit: 10 sec memory limit: 128 mb

submit: 100 solved: 59

[submit][status][discuss]

description

現在,我想知道自己是否還有選擇。

給定n個點m條邊的無向圖以及順序發生的q個事件。

每個事件都屬於下面兩種之一:

1、刪除某一條圖上仍存在的邊

2、詢問是否存在兩條邊不相交的路徑可以從點u出發到點v

input

第一行三個整數n,m,q

接下來m行,每行兩個整數u,v,表示u和v之間有一條邊

接下來q行,每行乙個大寫字母o和2個整數u、v,依次表示按順序發生的q個事件:

當o為』z』時,表示刪除一條u和v之間的邊

當o為』p』時,表示詢問是否存在兩條邊不相交的路徑可以從點u出發到點v

output

對於每組詢問,如果存在,輸出yes,否則輸出no

sample input

7 8 7

1 21 3

1 42 3

3 43 7

7 45 6

z 1 4

p 1 3

p 2 4

z 1 3

p 1 3

z 6 5

p 5 6

sample output

yesyes

nono

hint

對於全部資料,max(n,m,q)<=100000

source

[submit][status][discuss]

如果他是樹邊的話就直接link,否則就把路徑上的所有點縮成乙個邊雙。考慮到實子樹好處理,把x到y這條鏈弄出來然後設定父親,砍掉右子樹,但是虛子樹的父親資訊不好更改。不如使用乙個並查集,把這些點並起來,那麼實子樹的資訊都是對的。虛子樹的父親的資訊可能是錯的。所以在splay的時候find一下父親即可找到他父親對應的縮起來的點。顯然這樣縮點父子資訊仍然是對的。

#include

#include

#include

#include

#include

#include

#include

#include

using

namespace

std;

inline

int read()

const

int n=110000;

int rev[n],lc[n],rc[n],fa[n],father[n];

inline

int find(int x)

inline

void tag_rev(int x)

inline

void tag_down(int x)

}inline

void rotate(int x)

if(lc[y]==x) lc[y]=b,rc[x]=y;

else rc[y]=b,lc[x]=y;

}int sta[n];

inline

bool is_root(int x)

inline

void splay(int x)

while(sta[0]) tag_down(sta[sta[0]--]);

while(!is_root(x))

rotate(x);

}}inline

void access(int q)

}inline

void make_root(int x)

inline

void sc(int x,int y)

inline

void link(int x,int y)

inline

int find_root(int x)

return x;

}inline

void add(int x,int y)

link(x,y);

}int n,m,q;

char sr[5];

struct cc

a[n],b[n];

map ex[n];

int ans[n];

int main()

int x,y;

for(int i=1;i<=q;++i)

for(int i=1;i<=m;++i)

if(!ex[b[i].x][b[i].y])

add(b[i].x,b[i].y);

for(int i=q;i>=1;--i)

else add(a[i].x,a[i].y);

}for(int i=1;i<=q;++i)

if(a[i].z) puts(ans[i]?"yes":"no");

}

選擇 動態樹

題目描述 現在,我想知道自己是否還有選擇。給定n個點m條邊的無向圖以及順序發生的q個事件。每個事件都屬於下面兩種之一 1 刪除某一條圖上仍存在的邊 2 詢問是否存在兩條邊不相交的路徑可以從點u出發到點v 輸入 第一行三個整數n,m,q 接下來m行,每行兩個整數u,v,表示u和v之間有一條邊 接下來q...

bzoj2959 動態樹 長跑

2959 長跑 time limit 10 sec memory limit 256 mb submit 807 solved 408 submit status discuss description 某校開展了同學們喜聞樂見的陽光長跑活動。為了能 為祖國健康工作五十年 同學們紛紛離開寢室,離開教...

BZOJ 2243 染色 動態樹

題意 一棵樹,初始時每個節點有乙個顏色。兩種操作 1 將某條路經上的點的顏色統一修改為某個值 2 統計某條路徑上顏色有多少段?比如11221算3段。思路 splay節點記錄區間的左右兩側的顏色lr,該節點的顏色val以及總的段數以及標記。向上合併時根據左孩子右孩子的lr以及當前節點的val計算當前子...