兔子與星空 POJ NO 5442

2021-08-06 00:14:09 字數 2026 閱讀 2279

總時間限制: 1000ms

記憶體限制: 10000kb

很久很久以前,森林裡住著一群兔子。兔子們無聊的時候就喜歡研究星座。如圖所示,天空中已經有了n顆星星,其中有些星星有邊相連。兔子們希望刪除掉一些邊,然後使得保留下的邊仍能是n顆星星連通。他們希望計算,保留的邊的權值之和最小是多少?

輸入

第一行只包含乙個表示星星個數的數n,n不大於26,並且這n個星星是由大寫字母表裡的前n個字母表示。接下來的n-1行是由字母表的前n-1個字母開頭。最後乙個星星表示的字母不用輸入。對於每一行,以每個星星表示的字母開頭,然後後面跟著乙個數字,表示有多少條邊可以從這個星星到後面字母表中的星星。如果k是大於0,表示該行後面會表示k條邊的k個資料。每條邊的資料是由表示連線到另一端星星的字母和該邊的權值組成。權值是正整數的並且小於100。該行的所有資料字段分隔單一空白。該星星網路將始終連線所有的星星。該星星網路將永遠不會超過75條邊。沒有任何乙個星星會有超過15條的邊連線到其他星星(之前或之後的字母)。在下面的示例輸入,資料是與上面的圖相一致的。

輸出

輸出是乙個整數,表示最小的權值和

樣例輸入

9

a 2 b 12 i 25

b 3 c 10 h 40 i 8

c 2 d 18 g 55

d 1 e 44

e 2 f 60 g 38

f 0

g 1 h 35

h 1 i 35

樣例輸出

此題容易聯絡到最小生成樹問題,且由於題幹指出

該星星網路將永遠不會超過75條邊。沒有任何乙個星星會有超過15條的邊連線到其他星星

故即使是複雜度為o(

v2)

的演算法也可以駕馭。此題主要注意輸入表示即可。

為簡便起見,本次用鄰接矩陣實現此無向圖。由於

這n個星星是由大寫字母表裡的前n個字母表示

故直接將字母(char型)讀入後,減去『a』的ascii碼,得到字母對應的矩陣行列數,便可方便對矩陣進行初始化。至此便完成了無向圖的輸入。

@ [email protected]

// author: florence

// created time: 2017-08-09 16:38:17

#include

#include

#define max_n 30

#define inf 110

using

namespace

std;

int v,num,res = 0;

char t;

int dis;

char l;

int cost[max_n][max_n];

int d[max_n],used[max_n];

int prim()

if (v == -1) break;

used[v] = true;

res += d[v];

//更新距離陣列d

for (int i = 0;i < v;i++)

}cout

<< res << endl;

}int main(int argc, char** argv)

}//鄰接矩陣初始化

for (int i = 0;i < v - 1;i++)

}prim();

return

0;}

總體來說,這是一道經典的最小生成樹問題,適合基礎入門的學習。

兔子與兔子

很久很久以前,森林裡住著一群兔子。有一天,兔子們想要研究自己的 dna 序列。我們首先選取乙個好長好長的 dna 序列 小兔子是外星生物,dna 序列可能包含 26 個小寫英文本母 然後我們每次選擇兩個區間,詢問如果用兩個區間裡的 dna 序列分別生產出來兩隻兔子,這兩個兔子是否一模一樣。注意兩個兔...

雜湊 兔子與兔子

題目描述 很久很久以前,森林裡住著一群兔子。有一天,兔子們想要研究自己的 dna 序列。我們首先選取乙個好長好長的 dna 序列 小兔子是外星生物,dna 序列可能包含 26 個小寫英文本母 然後我們每次選擇兩個區間,詢問如果用兩個區間裡的 dna 序列分別生產出來兩隻兔子,這兩個兔子是否一模一樣。...

hash 兔子與兔子(C )

time limit 10 sec memory limit 128 mb submit 376 solved 75 submit status web board 很久很久以前,森林裡住著一群兔子。有一天,兔子們想要研究自己的dna序列。我們首先選取乙個好長好長的dna序列 小兔子是外星生物,dn...