codevs1003 電話連線

2022-05-08 08:00:10 字數 1765 閱讀 2229

題目描述 description

乙個國家有n個城市。若干個城市之間有**線連線,現在要增加m條**線(**線當然是雙向的了),使得任意兩個城市之間都直接或間接經過其他城市有**線連線,你的程式應該能夠找出最小費用及其一種連線方案。

輸入描述 input description

輸入檔案的第一行是n的值(n<=100).

第二行至第n+1行是乙個n*n的矩陣,第i行第j列的數如果為0表示城市i與城市j有**線連線,否則為這兩個城市之間的連線費用(範圍不超過10000)。

輸出描述 output description

輸出檔案的第一行為你連線的**線總數m,第二行至第m+1行為你連線的每條**線,格式為i j,(i第m+2行是連線這些**線的總費用。

樣例輸入 sample input

0 15 27 6 0

15 0 33 19 11

27 33 0 0 17

6 19 0 0 9

0 11 17 9 0

樣例輸出 sample output

1 42 5

資料範圍及提示 data size & hint

n<=100

正解:最小生成樹

解題報告:

現在每天只能刷一點水題。。。這題還真是傲嬌,居然只能用prim。。。其實我都快忘了prim是什麼了

1

//it is made by jump~

2 #include 3 #include 4 #include 5 #include 6 #include 7 #include 8 #include 9 #include 10 #include 11 #include 12 #include

13#ifdef win32

14#define ot "%i64d"

15#else

16#define ot "%lld"

17#endif

18using

namespace

std;

19 typedef long

long

ll;20

const

int maxn = 111;21

const

int inf = (1

<<30

);22

intn,cnt;

23int

a[maxn][maxn];

24bool

vis[maxn];

25int

low[maxn];

26int

next[maxn];

27int

ans;

2829

struct

edgee[maxn];

3233 inline int

getint()

3442

43 inline void

solve()

54 ans+=minl; vis[jilu]=1;55

for(int j=2;j<=n;j++) if(!vis[j] && a[jilu][j]jilu; }

56if(minl) 57}

5859 printf("

%d\n

",cnt);

6061

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

6566 printf("%d"

,ans);67}

6869

intmain()

70

Code Vs 1003 電話連線

比較水的題目,裸prim.下面 寫得有點麻煩.僅供參考.其實不用寫那麼多記錄.我是蒟蒻.qaq include include include include include include include includeusing namespace std const int m 105 con...

codevs 1003 電話連線

題解 prim 分析 從輸出要求中就可以看出本題是prim演算法求最小生成樹,所以,只需要實現就可以了。那麼,我們來回顧一下prim演算法 1.設有2個集合v1,v2 預設有5個點 2.在圖中找到離當前第乙個點最近的點,我們假設是2,然後用2去鬆弛每一條邊 3.重複第2步直到迴圈n 1次 那麼題目就...

codevs 1003 電話連線

拿到這個題,看到說要用prim演算法,感覺是個模板題,不過好像自己也沒怎麼寫過關於最小生成樹的題目,就嘗試著自己寫乙個prim演算法吧。基本思路是in i 維護每個i是否在生成樹裡面,用優先順序佇列儲存邊struct,過載小於運算子,但是不知道為什麼就是wa了。現在也還沒相通。然後就去看題解了,不過...