題目大意:
給你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 #include4view code#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 }
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...