FZYZOJ 2108 連線網路

2022-03-25 20:03:14 字數 1465 閱讀 6521

時間限制:1000ms

記憶體限制:131072kb

接上回(本oj的《p2107. zrn神犇之還原資料》),zrn神犇還原完資料,發現機房的網路連線全部中斷了。他準備把機房的網路恢復起來。

機房裡有若干臺整齊排放的電腦和乙個路由器。路由器可以提供無線網路連線(又稱wi-fi),覆蓋區域是乙個以它為圓心的圓。並且,如果某個電腦聯網了,它可以建立wi-fi熱點,為其它電腦提供網路連線,類似地,覆蓋區域也是乙個同樣大小的圓。但是,如果某個電腦無法通過wi-fi聯網的話,它就必須通過網線連線,但是同樣可以設定wi-fi熱點。

zrn神犇已經將路由器成功地連上了外網。現在問題來了,由於機房的機子眾多,而且都沒有程式設計軟體,zrn神犇只能把各個機器的座標寫成乙個檔案,不惜他的手機流量傳給你。請你幫助他計算一下,至少要購買多少條網線吧。

第一行,四個整數n、x、y、r,分別表示有n臺電腦、路由器在機房中的座標和它的wi-fi覆蓋半徑。

以後的n行每行兩個整數xi、yi,表示該電腦的座標。

僅一行,表示最少要購買多少條網線。

10 1 1 1

1 21 3

1 41 5

2 62 7

3 10

3 82 10

2 8

2
對於所有資料滿足n≤5000,x、y、r和xi、yi均在short int範圍內。r≥0。

資料十分有梯度!而且有坑!

【題解】

話說資料真的有坑!

不僅卡精度,sqrt過不了,而且還要long long。

其實就是簡單的並查集。

不過套了個平面模型。

這也算計算幾何?並不懂。反正我只會勾股定理。

用平方來比較即可。

注意r*r是可以提前計算的,不必重複計算,可提公升效率。

加了讀入優化2.0還是0.7s嗚嗚嗚~

1 #include2

using

namespace

std;

3int n,r,pre[5010],x[5010],y[5010];4

char b[1

<<15],*s=b,*t=b;

5char

getchar2()

8int getf(int

x) 18

return

r;19}20

intread()

24while(ch>='

0'&&ch<='

9')

25return x*f;26}

27int

main()

35int ans=0;36

for (int i=0;i<=n;++i) if(pre[i]==i) ans++;

37 printf("

%d\n

",ans-1

);38

return0;

39 }

view code

六 連線模式 1) 連線簡介

可以借用 sql 的連線來解釋 假設 表a 表b 內連線 a.name b.name 儲存共有的相同值屬性 外連線 左外連線 以 外來鍵表a 左 屬性為基準。包含a屬性整列。b屬性符合a屬性值的存入,其餘b屬性被置為 null。右外連線 以 外來鍵表b 右 屬性為基準。包含b屬性整列。b屬性符合a屬...

13 連線查詢

假設 a 表中有3條記錄,b表中有 4 條記錄 那麼,語句select from a,b 會將a,b兩張表的資料交叉拼接起來,形成 3 4 12 條記錄的結果集,此結果集叫做笛卡爾積。ora 00918 未明確定義列 改進辦法 明確列的所屬 select empno,ename,emp.deptno...

004 連線查詢

再大多數的情況下,我們都需要進行連線查詢.笛卡爾積的產生 這個就是多表查詢的的最初結果集,那麼以後我們需要作的就是從結果集中篩選出需要的結果集.篩選的方式不同,導致sql的效率不同.篩選的方式就是加入連線標準.等值連線 select 字段 from 表1 表2 where 連線條件.eg 查詢員工名...