資訊學奧賽一本通1349「最優佈線問題」

2021-08-15 07:25:01 字數 1111 閱讀 8561

下面是題目描述:

【題目描述】

學校有n臺計算機,為了方便資料傳輸,現要將它們用資料線連線起來。兩台計算機被連線是指它們有資料線連線。由於計算機所處的位置不同,因此不同的兩台計算機的連線費用往往是不同的。

當然,如果將任意兩台計算機都用資料線連線,費用將是相當龐大的。為了節省費用,我們採用資料的間接傳輸手段,即一台計算機可以間接的通過若干臺計算機(作為中轉)來實現與另一台計算機的連線。

現在由你負責連線這些計算機,任務是使任意兩台計算機都連通(不管是直接的或間接的)。

【輸入】

第一行為整數n(2≤n≤100),表示計算機的數目。此後的n行,每行n個整數。第x+1行y列的整數表示直接連線第x臺計算機和第y臺計算機的費用。

【輸出】

乙個整數,表示最小的連線費用。

思考後可知,連線後費用最小,也就是合併後權值最小,這是乙個最小生成樹問題,使用並查集和kruskal演算法完成。(在連線的過程中求ans)

不知大家發現沒有,輸入中第n行第n列一定是0,自己到自己沒有權值。

下面是程式**:

#includeusing namespace std;

int father[5001],ans=0;

struct point

;point a[5001];

int find(int x)//遞迴找呀找爸爸

bool cmp(const point &a,const point &b)//按權值排序

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

father[i]=i;//建立並查集,自己當自己爸爸

sort(a+1,a+m+1,cmp);

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

if(k==n-1) break;//最小生成樹的條件:n-1連線成最小生成樹

} printf("%d",ans);

return 0;

}

並查集,不過就是乙個兒子(wusir)認爸爸,爸爸認兒子的過程(^^)。上定義struct point,也可以純用陣列模擬,就是麻煩很多。

類似的題,如還要求出連線方案,再設乙個陣列儲存即可。

蒟蒻第一次寫部落格,不好或有誤請大佬些多多包涵~

資訊學奧賽一本通 小球(drop)

許多的小球乙個乙個的從一棵滿二叉樹上掉下來組成fbt full binary tree,滿二叉樹 每一時間,乙個正在下降的球第乙個訪問的是非葉子節點。然後繼續下降時,或者走右子樹,或者走左子樹,直到訪問到葉子節點。決定球運動方向的是每個節點的布林值。最初,所有的節點都是false,當訪問到乙個節點時...

資訊學奧賽一本通 小球(drop)

this drop is gonna last forever!許多的小球乙個乙個的從一棵滿二叉樹上掉下來組成fbt full binary tree,滿二叉樹 每一時間,乙個正在下降的球第乙個訪問的是非葉子節點。然後繼續下降時,或者走右子樹,或者走左子樹,直到訪問到葉子節點。決定球運動方向的是每個...

資訊學奧賽一本通(C 版)

資訊學奧賽一本通 c 版 總目錄 1.資訊學奧賽一本通 c 版 刷題 記錄 2.資訊學奧賽一本通 c 版 第一部分 c 語言 第一章 c 語言入門 3.資訊學奧賽一本通 c 版 第一部分 c 語言 第二章 順序結構程式設計 4.資訊學奧賽一本通 c 版 第一部分 c 語言 第三章 程式的控制結構 5...