传送门

题目大意:

求原图的最小生成树,和次小生成树。

题目分析:

kruskals求mst(\(O(mlogm)\))
考虑次小生成树暴力的做法,因为次小生成树总是由最小生成树删掉一条边并添加一条边得到的,所以可以枚举最小生成树上的每一条边删去,再重新求一遍mst。(\(O(m^2logm)\))
下面的题解来自转载:(\(O(n^2(求最大权值) + mlogm(求最小生成树) + m(求次小))\))

code

#include<bits/stdc++.h>
using namespace std;
const int N = 550, M = 150050, OO = 0x3f3f3f3f;
int n, ans, m;
struct node{int x, y, dis;inline bool operator < (const node &b) const{return dis < b.dis;}
}edge[M];
int d[N][N];
bool vst[N], used[M];
namespace mst{int ecnt, adj[N], nxt[M << 1], go[M << 1], len[M << 1];inline void addEdge(int u, int v, int c){nxt[++ecnt] = adj[u], adj[u] = ecnt, go[ecnt] = v, len[ecnt] = c;nxt[++ecnt] = adj[v], adj[v] = ecnt, go[ecnt] = u, len[ecnt] = c;}int anc[N];inline int getAnc(int x){return x == anc[x] ? x : (anc[x] = getAnc(anc[x]));}inline int kruskals(){int ret = 0;sort(edge + 1, edge + m + 1);for(int i = 1; i <= m; i++){int fx =  getAnc(edge[i].x), fy = getAnc(edge[i].y);if(fx != fy) anc[fx] = fy, ret += edge[i].dis, addEdge(edge[i].x, edge[i].y, edge[i].dis), used[i] = true;}return ret;}inline void dfs(int now, int u, int f, int mx){d[now][u] = d[u][now] = mx;for(int e = adj[u]; e; e = nxt[e]){int v = go[e];if(v == f) continue;dfs(now, v, u, max(mx, len[e]));}}
} int main(){scanf("%d%d", &n, &m);for(int i = 1; i <= n; i++) mst::anc[i] = i;for(int i = 1; i <= m; i++){int x, y, c; scanf("%d%d%d", &x, &y, &c);edge[i] = (node){x, y, c};}ans = mst::kruskals();if(n - 1 == mst::ecnt / 2) printf("Cost: %d\n", ans);else printf("Cost: -1\nCost: -1\n");int ans1 = OO;for(int i = 1; i <= n; i++)mst::dfs(i, i, 0, 0);for(int i = 1; i <= m; i++){if(used[i]) continue;int x = edge[i].x, y = edge[i].y;ans1 = min(ans1, ans - d[x][y] + edge[i].dis);}if(ans1 != OO) printf("Cost: %d", ans1);else printf("Cost: -1");return 0;
}

转载于:https://www.cnblogs.com/CzYoL/p/7732091.html

vijos1070 新年趣事之游戏 - 次小生成树相关推荐

  1. poj 1679 次小生成树

    次小生成树的求法: 1.Prime法 定义一个二维数组F[i][j]表示点i到点j在最小生成树中的路径上的最大权值.有个知识就是将一条不在最小生成树中的边Edge加入最小生成树时,树中要去掉的边就是E ...

  2. HDU4081(次小生成树)

    1.其中:枚举每条不在最小生成树上的边,并把这条边放到最小生成树上面,然后就一定形成环,那么我们将这条环中取出最长的一条路.最终我们得到的权值便是最小生成树的权值. Max[i][j]表示的最小生成树 ...

  3. 模板 - LCA最近公共祖先(倍增法、Tarjan、树上差分、LCA优化的次小生成树)

    整理的算法模板合集: ACM模板 注意x和y的LCA可以是x或者y本身 一.LCA的在线倍增算法 /*给定一棵包含 n个节点的有根无向树,有 m个询问,每个询问 给出了一对节点的编号 x和 y,询问 ...

  4. 解题报告:luogu P4180 [BJWC2010]严格次小生成树(次小生成树、倍增LCA优化、O(mlogn) )

    P4180 [BJWC2010]严格次小生成树 次小生成树有两种,一种是不严格次小生成树,也就是可以数值上等于最小生成树,一种是严格次小生成树,是权值严格大于最小生成树,两种求法大同小异. 方法2在严 ...

  5. 最小生成树(kruskal、prim、最小生成森林问题、严格次小生成树)

    整理的算法模板合集: ACM模板 目录 一.kruskal算法 二.prim算法 三.Boruvka算法 四.生成森林问题(K颗树) 五.最小生成树的唯一性 六.严格次小生成树 LCA优化的次小生成树 ...

  6. 一棵树的生成树有几颗_次小生成树(树剖,生成树)

    生成树的概念: 在一个无向图中,设顶点数为\(n\),取其中\(n-1\)条边并使所有点相连,所得到的一棵树即为生成树. 最小生成树: 如果还没有接触过生成树的同学,欢迎戳->最小生成树详解 次 ...

  7. 次小生成树(Prim + Kruaskal)

    问题引入: 我们先来回想一下生成树是如何定义的,生成树就是用n - 1条边将图中的所有n个顶点都连通为一个连通分量,这样的边连成子树称为生成树. 最小生成树很明显就是生成树中权值最小的生成树,那么我们 ...

  8. POJ 1679 - The Unique MST(次小生成树)

    题目链接 https://vjudge.net/problem/POJ-1679 Given a connected undirected graph, tell if its minimum spa ...

  9. BZOJ 1977: [BeiJing2010组队]次小生成树(Kruskal+树上倍增)

    1977: [BeiJing2010组队] 次小生成树 Tree Time Limit: 10 Sec Memory Limit: 512 MB Description 小 C 最近学了很多最小生成树 ...

  10. POJ 1679 The Unique MST(次小生成树)

    求次小生成树的两种方法. 第一种:Kruskal算法比较好操作.先求一遍最小生成树,然后再记录最小生成树上的边.然后再枚举删去最小生成树上的边,再求最小生成树,如果求出的最小生成树的花费等于第一次最小 ...

最新文章

  1. php 状态模式,PHP设计模式之状态模式
  2. c语言24点程序,C语言24点问题
  3. JavaScript实现Floyd-Warshall算法(附完整源码)
  4. JAVA 框架-Spring-AOP面向切面
  5. 不容错过!我的Mac装机软件清单,Mac新手看过来!
  6. 交流信号叠加直流偏置_接收无线电信号利器,一款无线有源环形收音机接收天线放大器...
  7. Intouch/ifix语音报警系统制作(4-自动发送邮件提醒)
  8. status函数(自学数据结构第一天)
  9. VirtualBox硬盘扩容
  10. 基于Ntrip的实时多线程RTCM数据流接收及解码
  11. 百科不全书之Python进阶
  12. 【毕业设计】ESP8266 WiFi 模块使用介绍 - 单片机 物联网 嵌入式
  13. 今日更新京东皮卡丘1.7修复链接和预约抢购下单商品,手机端茅台抢购软同步上架(可配备群控使用)
  14. Effective C++中文版
  15. python 爬取学信网登录页面
  16. 导入和导出requirement
  17. 小米官网html二级导航怎么做,小米路由器做二级路由器怎么设置?
  18. 20164305徐广皓 - Exp1 PC平台逆向破解(5)M
  19. 占用栅格地图(occupancy grid map)
  20. Java基础知识——IO流

热门文章

  1. 证明数列发散 --- 第[π]期习题答案
  2. 给娃看的人工智能——六一之际浅谈人工智能
  3. java.sql.SQLException: Incorrect integer value: '' for column 'id' at row 1
  4. 【最终版本】SVO框架总结
  5. 中国移动应用内计费平台服务器接口示例代码之“非官方”的一些说明
  6. ssm在线点歌系统的设计与实现
  7. 当风起时, 只需扬帆
  8. 【Redis】跳跃列表
  9. 支付行业数据要素的价值分析
  10. Python入门基础小练习