poj2236 並查集板子題

2022-05-01 18:06:05 字數 1144 閱讀 1786

題目大意:

給你n臺電腦和乙個距離d,然後給你n臺電腦的座標xi,yi,0<=xi,yi<=10000,d<=20000,給你最多3e5次查詢,每次查詢中,(o x)表示修復了x號電腦,(s x y)表示詢問x和y是否可以通訊,返回查詢結果(如果兩台電腦距離在d之內,那麼兩台電腦可以相連)

題解:一共3e5次查詢,但是最多有1000個點,所以最多修復1000臺電腦,列舉所有電腦,找到他周圍可以連線的電腦,進行合併(一開始想的是,如果修復3e5次,直接時間**,不過後來發現最多修1e3次,傻了。。。)給了10s,直接水過

不知道為啥我開始想的時候是在連線的時候就進行合併,然後修復的時候再找邊,一定是失了智。。。

貼上**:

1 #include2 #include3 #include4

#define mem(a,b) memeset(a,b,sizeof(b))

5using

namespace

std;

6const

int maxn=1e3+10;7

intparent[maxn],vis[maxn],rank[maxn];

8int

d,n;

9struct

node

1013 node(int a,int

b):x(a),y(b){}

14}pc[maxn];

15double

len(node a,node b)

1621

int find(int

x)22

34return

r;35}36

void merg(int x,int

y)37

45else

4650}51

void

ini()

5255

intmain()

5663

char

s;64

while(cin>>s)

6579

/*for(int i=1;i<=n;i++)

80puts("\n");

*/83}84

else

8592}93

return0;

94 }

view code

POJ2236 簡單並查集

poj2236 題目大意 有很多臺電腦,兩台電腦距離在d之內才能通訊,或者通過第三台電腦進行通訊。判斷兩台電腦能否通訊。0表示修復,s表示測試。題解 這是簡單的並查集,s的時候只要判斷兩台電腦是不是在乙個集合中就行,0將兩個點合併的時候注意要判斷距離是不是小於d。include include in...

poj 2236 並查集模板

題意 n台壞了的計算機放置在n個不同的位置,若兩台計算機的距離不超過d且兩台計算機都已修好,那麼這兩台計算機可以通訊。間接通訊也叫做通訊。現進行若干次操作,修計算機或查詢兩台計算機是否可通訊。查詢時判斷時候可通訊。題解 並查集 1.這個就是並查集模板題。2.憑藉著以往的記憶寫了乙個先是wa後是t,看...

poj 2236 並查集 計算機網路

題意 給出n,d代表有n個計算機,還有可以建立連線的限制距離d。o 後面的數字代表了維修好的計算機,s 後面的兩個數字用來判斷,這兩個計算機是否建立的連線。思路 並查集,每修好乙個計算機,進行標記,同時列舉所有計算機,在維修好的計算機中,找出可以建立連線的計算機,進行合併。include inclu...