传送门

题目大意:

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

题目分析:

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;
}

vijos1070 新年趣事之游戏 - 次小生成树的更多相关文章

  1. vijos次小生成树

    xiaomengxian的哥哥是一个游戏迷,他喜欢研究各种游戏.这天,xiaomengxian到他家玩,他便拿出了自己最近正在研究的一个游戏给xiaomengxian看.这个游戏是这样的:一个国家有N ...

  2. HDU 4081Qin Shi Huang's National Road System(次小生成树)

    题目大意: 有n个城市,秦始皇要修用n-1条路把它们连起来,要求从任一点出发,都可以到达其它的任意点.秦始皇希望这所有n-1条路长度之和最短.然后徐福突然有冒出来,说是他有魔法,可以不用人力.财力就变 ...

  3. POJ1679 The Unique MST[次小生成树]

    The Unique MST Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 28673   Accepted: 10239 ...

  4. The Unique MST(次小生成树)

    Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 22335   Accepted: 7922 Description Give ...

  5. URAL 1416 Confidential --最小生成树与次小生成树

    题意:求一幅无向图的最小生成树与最小生成树,不存在输出-1 解法:用Kruskal求最小生成树,标记用过的边.求次小生成树时,依次枚举用过的边,将其去除后再求最小生成树,得出所有情况下的最小的生成树就 ...

  6. POJ1679The Unique MST(次小生成树)

    The Unique MST Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 25203   Accepted: 8995 D ...

  7. [kuangbin带你飞]专题八 生成树 - 次小生成树部分

    百度了好多自学到了次小生成树 理解后其实也很简单 求最小生成树的办法目前遇到了两种 1 prim 记录下两点之间连线中的最长段 F[i][k] 之后枚举两点 若两点之间存在没有在最小生成树中的边 那么 ...

  8. URAL 1416 Confidential(次小生成树)

    题目链接:http://acm.timus.ru/problem.aspx?space=1&num=1416 Zaphod Beeblebrox — President of the Impe ...

  9. ACM题目————次小生成树

    Description 最小生成树大家都已经很了解,次小生成树就是图中构成的树的权值和第二小的树,此值也可能等于最小生成树的权值和,你的任务就是设计一个算法计算图的最小生成树. Input 存在多组数 ...

随机推荐

  1. Hbase技术详细学习笔记

    注:转自 Hbase技术详细学习笔记 最近在逐步跟进Hbase的相关工作,由于之前对Hbase并不怎么了解,因此系统地学习了下Hbase,为了加深对Hbase的理解,对相关知识点做了笔记,并在组内进行 ...

  2. HTML、XHTML、css速记

    一.HTML 下面内容记录经常使用的html元素.可另存为html文件以查看效果: <!doctype html> <html lang="zh-cn"> ...

  3. struts2笔记---struts2的执行过程

    1.服务器启动: 加载项目web.xml 创建struts核心过滤器对象,执行filter-->init() struts-default.xml     核心功能的初始化 struts-plu ...

  4. es6三点运算符的用法

    扩展运算符( spread )是三个点(...).它好比 rest 参数的逆运算,将一个数组转为用逗号分隔的参数序列. console.log(...[1,2,3]); console.log(1,. ...

  5. UVA 11624 - Fire! 图BFS

    看题传送门 昨天晚上UVA上不去今天晚上才上得去,这是在维护么? 然后去看了JAVA,感觉还不错昂~ 晚上上去UVA后经常连接失败作死啊. 第一次做图的题~ 基本是照着抄的T T 不过搞懂了图的BFS ...

  6. [Angular2 Router] Preload lzay loading modules

    From router v3.1.0, we have preloading system with router. PreloadAllModules After the init module l ...

  7. Unreal Enginer4特性介绍-牛B闪闪的UE4

    声明:转载说明出处! unreal4特性介 原文地址:   https://www.unrealengine.com/products/unreal-engine-4     unreal engin ...

  8. 【a101】高精度实数加法

    Time Limit: 1 second Memory Limit: 2 MB 问题描述 给出两个高精度正实数(可以含有小数点或没有),最长200位,字符串读入 求它们的和,小数部分末尾的0要舍去. ...

  9. javascrit开发的基本代码结构的

    今天看到群里一个demo,简单看了一下. 然后自己就写了一个通用的javascrit开发的基本代码结构的js文件. 代码例如以下: (function($,win){ //定义全局变量对象 var o ...

  10. 详解HTML的a标签(超链接标签)

    原文 简书原文:https://www.jianshu.com/p/d6a2499db73b 大纲 1.什么是<a>标签 2.<a>标签的几个重要属性 3.a标签的运行机制 4 ...