傳送門
思路:
這裡用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...