NYOJ 118 Prim求次小生成樹

2021-07-15 06:31:40 字數 800 閱讀 5141

傳送門

思路:

這裡用maxlen記錄在最小生成樹里的點兩點之間存在的最大的權值邊,

然後列舉每條沒有加入的邊,如果有很這兩點之間在最小生成樹里的最大邊相等的,就說明有次小生成樹。

#include 

#include

#include

#include

#include

using

namespace

std;

#define inf 0x3f3f3f3f

const

int max=505;

int t,m,n;//m點的數量,n邊的數量

int mp[max][max],maxlen[max][max],dis[max];

int pre[max];//生成樹里每個點的父節點

bool vis[max];

void init()

int prim()

vis[1]=1;

int sum=0;

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

vis[mini]=1;

sum+=mi;

for(int j=1;j<=m;j++)}}

return sum;

}bool secondmst()

}return0;}

int main()

prim();

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

return

0;}

nyoj 118 次小生成樹

描述 南將軍率領著許多部隊,它們分別駐紮在n個不同的城市裡,這些城市分別編號1 n,由於交通不太便利,南將軍準備修路。現在已經知道哪些城市之間可以修路,如果修路,花費是多少。現在,軍師小工已經找到了一種修路的方案,能夠使各個城市都聯通起來,而且花費最少。但是,南將軍說,這個修路方案所拼成的圖案很不吉...

NYOJ 118 次小生成樹

先是prime演算法糾結了一天,然後這個次小生成樹又糾結了一天。本來昨天能搞出來的,昨天滿課,晚上又開會,就推到了今天上午,在10點之前做了出來。貢獻了幾次wr,不容易啊。深刻理解了prime,寫次小生成樹時應該會容易一點點。次小生成樹的兩種演算法 演算法1 step 1.先用prim求出最小生成樹...

nyoj118 修路方案 次小生成樹

如果已知最小生成樹,將未在生成樹的一條路徑加入生成樹必會產生乙個環,刪除環中除剛新增的一條以外的最大邊剩下的就是次小生成樹.求最小生成樹時用maxd陣列儲存兩點間最大的一條邊刪除時使用.include define inf 0x3f3f3f3f using namespace std const i...