vijos1070 新年趣事之游戏 - 次小生成树
题目大意:
求原图的最小生成树,和次小生成树。
题目分析:
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 新年趣事之游戏 - 次小生成树的更多相关文章
- vijos次小生成树
xiaomengxian的哥哥是一个游戏迷,他喜欢研究各种游戏.这天,xiaomengxian到他家玩,他便拿出了自己最近正在研究的一个游戏给xiaomengxian看.这个游戏是这样的:一个国家有N ...
- HDU 4081Qin Shi Huang's National Road System(次小生成树)
题目大意: 有n个城市,秦始皇要修用n-1条路把它们连起来,要求从任一点出发,都可以到达其它的任意点.秦始皇希望这所有n-1条路长度之和最短.然后徐福突然有冒出来,说是他有魔法,可以不用人力.财力就变 ...
- POJ1679 The Unique MST[次小生成树]
The Unique MST Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 28673 Accepted: 10239 ...
- The Unique MST(次小生成树)
Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 22335 Accepted: 7922 Description Give ...
- URAL 1416 Confidential --最小生成树与次小生成树
题意:求一幅无向图的最小生成树与最小生成树,不存在输出-1 解法:用Kruskal求最小生成树,标记用过的边.求次小生成树时,依次枚举用过的边,将其去除后再求最小生成树,得出所有情况下的最小的生成树就 ...
- POJ1679The Unique MST(次小生成树)
The Unique MST Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 25203 Accepted: 8995 D ...
- [kuangbin带你飞]专题八 生成树 - 次小生成树部分
百度了好多自学到了次小生成树 理解后其实也很简单 求最小生成树的办法目前遇到了两种 1 prim 记录下两点之间连线中的最长段 F[i][k] 之后枚举两点 若两点之间存在没有在最小生成树中的边 那么 ...
- URAL 1416 Confidential(次小生成树)
题目链接:http://acm.timus.ru/problem.aspx?space=1&num=1416 Zaphod Beeblebrox — President of the Impe ...
- ACM题目————次小生成树
Description 最小生成树大家都已经很了解,次小生成树就是图中构成的树的权值和第二小的树,此值也可能等于最小生成树的权值和,你的任务就是设计一个算法计算图的最小生成树. Input 存在多组数 ...
随机推荐
- CentOS6.X安装10G需要额外安装的软件包
yum -y install libXp yum -y install libXp.i686 yum -y install libXtst.i686
- rhel5安装 oracle11
readhat 安装11gr2文档 需要注意的地方:必须关掉的 1,防火墙:2,SElinux . root 用户运行 setup 命令可关防火墙与SElinux 修改网络配置文件,一定要重启此文 ...
- SD卡与tf卡引脚转换
https://www.cnblogs.com/shangdawei/p/3255414.html
- 4. Vue-Resource / axios 异步插件
安装 cnmp i vue-resource --save (--save 安装到dependencies下) 引用 <script src="node_modules/vue-res ...
- nuxt配置sass
没有比这更简单的了 只需要安装 node-sass sass-loader 就可以了 npm i node-sass sass-loader -D 然后就可以直接使用了: <style lang ...
- SSH进阶(2)——用Struts拦截器实现登陆限制
拦截器从字面意思来看就是限制.限制用户訪问某些网页.在Action提出请求之前用拦截器来做权限设置,让符合的用户跳入对应的界面中.近期做的一个商城项目中就用到了自己定义的拦截器,实现了一个简单的ses ...
- 深入并发AQS二
AQS须要解决下面几个问题: 1.锁状态,怎样保证并发情况下可以安全的更新? 2.当前线程不能获取锁时,放在哪里? AQS是放在一个队列其中 3.怎样提高效率? AQS的主要职责是当获取不到锁时.将线 ...
- 常用的织梦dedecms安全设置集合整理
织梦系统用户很多,被发现的漏洞也就相对很多,所以网站安全需要做好,很多所谓的“黑客”都是用工具来扫描入侵,厉害点的人是不屑来黑我们的小网站的,所以在我们不是专业维护人员情况下,做好一般的安全防护就可以 ...
- Maven使用yuicompressor-maven-plugin打包压缩css、js文件
最近项目想使用在maven打包的时间压缩js,css文件,采用yuicompressor-maven-plugin插件进行压缩,但只是压缩减小大小,提高请求速度,并没有对js进行混淆.下面就写一下这个 ...
- keytool用法总结
一.keytool的概念 keytool 是个密钥和证书管理工具.它使用户能够管理自己的公钥/私钥对及相关证书,用于(通过数字签名)自我认证(用户向别的用户/服务认证自己)或数据完整性以及认证服务.在 ...