URAL-1416 (典型的次小生成树)
来源:互联网 发布:matlab中初始化矩阵 编辑:程序博客网 时间:2024/06/08 06:16
题目大意:
给出一个带权无向图,求出最小生成树和次小生成树,注意这里两个结果可以相等。当生成树不存在的时候就可以输出-1;
思路:
这是典型的次小生成树的求法,注意细节尤其是初始化。错了好多次。
次小生成树就是有一条边和最小生成树不一样。所以保存最小生成树的每一条边,然后遍历即可。
#include <iostream>#include <cstdio>#include <cstring>#include <algorithm>using namespace std;const int MAX = 505;const int INF = 0x3f3f3f3f;int used[MAX];int f[MAX];int n,m;int Minused;struct Edge{ int s,e,v;}edge[MAX*MAX];int cmp(Edge a,Edge b){ return a.v < b.v;}void init(){ for(int i = 0;i <= n; i++) f[i] = i;}int Find(int x){ if(x != f[x]) f[x] = Find(f[x]); return f[x];}int krustal(){ init(); memset(used,0,sizeof(used)); sort(edge,edge+m,cmp); int pos = 0,flag = 0; Minused = 0; int ans = 0; for(int i = 0;i < m; i++) { int a = Find(edge[i].s); int b = Find(edge[i].e); if(a != b) { f[a] = b; pos++; used[Minused++] = i; ans += edge[i].v; } if(pos == n - 1) { break; } } if(pos == n - 1) return ans; return -1;}int Next_min_tree(){ int temp = INF; for(int i = 0;i < Minused; i++) { init(); int pos = 0; int ans = 0; for(int j = 0;j < m; j++) { if(used[i] != j) { int a = Find(edge[j].s); int b = Find(edge[j].e); if(a != b) { f[a] = b; pos++; ans += edge[j].v; } if(pos == n -1) break; } } if(pos == n - 1 && temp > ans) temp = ans; } if(temp == INF) return -1; return temp;}int main(){ //freopen("in.txt","r",stdin); while(scanf("%d%d",&n,&m) != EOF) { for(int i = 0;i < m; i++) { scanf("%d%d%d",&edge[i].s,&edge[i].e,&edge[i].v); } int ans = krustal(); int ans1 = Next_min_tree(); printf("Cost: %d\n",ans); printf("Cost: %d\n",ans1); } return 0;}
0 0
- URAL-1416 (典型的次小生成树)
- Ural 1416 Confidential,次小生成树
- URAL - 1416 Confidential(次小生成树)
- URAl 1416Confidential【次小生成树】
- URAL 1416 Confidential --最小生成树与次小生成树
- Ural 1416 Confidential(最小生成树+次小生成树)
- poj1679 The Unique MST(次小生成树) Ural 1416 Confidential
- 次小生成树
- 次小生成树
- 次小生成树
- 次小生成树
- 次小生成树
- 次小生成树
- 次小生成树
- 次小生成树
- 次小生成树
- 次小生成树
- 次小生成树
- 解析json字符串,根据key得到对应的value的方法
- PAT-A 1092. To Buy or Not to Buy (20)
- 使用 Spring Data JPA 简化 JPA 开发
- struts2 s2-045漏洞检测 &临时解决方案
- PHP、Yii PC端接QQ、微信、新浪微博 第三方登陆
- URAL-1416 (典型的次小生成树)
- Java语言概述
- 【WebStorm】利用WebStorm来管理你的Github
- CentOS7 Firewall 简单设置
- 底部导航之BottomNavigationBar
- Theano学习笔记:“Optimization failure due to: constant_folding”错误
- 数据库
- [译]AngularJS 1.3.0 开发者指南(二) -- 概念综述
- 大话数据结构05——字符串