安科 OJ 1190 連線電腦 (並查集)

2022-03-04 03:52:00 字數 1203 閱讀 8630

時間限制:1 s

空間限制:128 m

傳送門:

機房裡有若干臺電腦,其中有一些電腦已經相互連線。如果a和b通過網線相連,並且b與c也通過網線相連,那麼即便a和c之間沒有直接的網線相連,也可以認為a和c是相連的。由於機房裡的佈線比較亂,並不是所有電腦都相互連通,請問在不變動當前佈線情況下,最少要購買幾條網線才能使得機房所有電腦都兩兩連通。 

多組資料。每組資料第一行為整數n,m。n是電腦數量,m是機房已布置好的網線數量。接下來m行,每行為整數a,b。表明a,b之間通過一條網線直接相連。這裡可以認為網線是不分方向的,即a->b等價於b->a。 

(0 < n <= 200,0 <= m <= 10000,0 < a,b <= n 。) n=0和m=0為輸入結束,不需要處理。 

每組乙個整數,即最少還要購買幾根網線。

421

2234

0100

0

1

30

思路:用並查集儲存,若是連在一起的電腦就存到乙個集合裡面,最後判斷下有幾個集合,答案就是集合個數減一。在連線集合的時候設左邊為父結點。

**:

1 #include 2 #include 3 #include 4

5using

namespace

std;

6int fina(int

num);

7int n, m, a[2010];8

9int

main()

1025}26

int ans = 0;27

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

28if (a[i] == i) ans ++;

2930 cout << ans - 1

<31 cin >> n >>m;

33 memset(a,0,sizeof

(a));34}

35return0;

36}3738

int fina(int

num)

3946 }

ps:應該是安科 oj 資料的問題,題目說的 n <= 200,但是陣列開到210就會越界,開到2010才行(當時debug了好久,555~)

六 連線模式 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 查詢員工名...