国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

HDU1233 還是暢通工程 【最小生成樹】

2019-11-06 06:27:21
字體:
來源:轉載
供稿:網友

PRoblem: 給定每兩節點間的距離,求出這幅圖的最小生成樹的權值。 Solution: 利用kruskal或者prim算法求最小生成樹,密集圖prim算法的效率會更高一些。

kruskal:

#include<numeric>#include<functional>#include<unordered_map>#include<unordered_set>#include<cstdio>#include<iostream>#include<sstream>#include<cstdlib>#include<cmath>#include<cctype>#include<string>#include<cstring>#include<algorithm>#include<stack>#include<queue>#include<set>#include<map>#include<ctime>#include<vector>#include<fstream>#include<list>using namespace std;typedef long long ll;typedef unsigned long long ull;#define ms(s) memset(s,0,sizeof(s))const double PI = 3.141592653589;const int INF = 0x3fffffff;int par[110];void init_pair(int n) { for(int i = 0; i <= n; i++) par[i] = i;}int find(int son) { if(par[son] != son) par[son] = find(par[son]); return par[son];}void merges(int a, int b) { par[find(a)] = par[b];}struct Edge { int b, e, w; Edge(int bb, int ee, int ww) : b(bb), e(ee), w(ww) {} bool Operator < (const Edge& rhs) const { return w > rhs.w; }};priority_queue<Edge> pq;int main() {// freopen("/Users/really/Documents/code/input","r",stdin); // freopen("/Users/really/Documents/code/output","w",stdout); ios::sync_with_stdio(false); int n; int a, b, c, ans; while(cin >> n) { if(n == 0) break; init_pair(n); while(!pq.empty()) pq.pop(); ans = 0; for(int i = 0; i < n*(n-1)/2; i++) { cin >> a >> b >> c; pq.push(Edge(a, b, c)); } while(!pq.empty()) { Edge t = pq.top(); pq.pop(); if(find(t.b) != find(t.e)) { merges(t.b, t.e); ans += t.w; } } cout << ans << endl; } return 0;}

Prim

#include<numeric>#include<functional>#include<unordered_map>#include<unordered_set>#include<cstdio>#include<iostream>#include<sstream>#include<cstdlib>#include<cmath>#include<cctype>#include<string>#include<cstring>#include<algorithm>#include<stack>#include<queue>#include<set>#include<map>#include<ctime>#include<vector>#include<fstream>#include<list>using namespace std;typedef long long ll;typedef unsigned long long ull;#define ms(s) memset(s,0,sizeof(s))const double PI = 3.141592653589;const int INF = 0x3fffffff;int G[105][105];int visited[110];int main() {// freopen("/Users/really/Documents/code/input","r",stdin); // freopen("/Users/really/Documents/code/output","w",stdout); ios::sync_with_stdio(false); int n, ans; int a, b, c, mins, idx; while(cin >> n) { if(n == 0) break; ms(visited); visited[1] = true; ans = 0; for(int i = 0; i < n*(n-1)/2; i++) { cin >> a >> b >> c; G[a][b] = G[b][a] = c; } for(int i = 2; i <= n; i++) { mins = INF; for(int j = 1; j <= n; j++) { if(!visited[j] && G[1][j] < mins) { mins = G[1][j]; idx = j; } } visited[idx] = true; ans += mins; for(int j = 1; j <= n; j++) G[1][j] = min(G[1][j], G[idx][j]); } cout << ans << endl; } return 0;}
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 白银市| 宝鸡市| 宁国市| 潜山县| 海安县| 南投县| 盐城市| 涿鹿县| 济南市| 乐清市| 凤山市| 兴安县| 嘉荫县| 乌鲁木齐县| 宁波市| 吴桥县| 上高县| 墨竹工卡县| 明水县| 微山县| 揭阳市| 汪清县| 麦盖提县| 南乐县| 新干县| 独山县| 乳山市| 姜堰市| 新绛县| 阳泉市| 安丘市| 乌苏市| 许昌县| 紫云| 宝清县| 广河县| 邵武市| 东至县| 健康| 绥化市| 德惠市|