uva 10600 ACM Contest And Blackout
题意:
求最小生成树和次小生成树的总权值。
思路:
第一种做法,适用于规模较小的时候,prim算法进行的时候维护在树中两点之间路径中边的最大值,复杂度O(n^2),枚举边O(m),总复杂度O(n^2);
第二种做法,倍增求lca,预处理复杂度O(nlog(n)),替换的时候log(n),总复杂度为O(mlog(n))。
代码:
- #include <stdio.h>
- #include <string.h>
- #include <algorithm>
- using namespace std;
- const int maxn = ;
- const int inf = 0x3f3f3f3f;
- int mp[maxn][maxn];
- bool vis[maxn];
- bool used[maxn][maxn];
- int d[maxn];
- int path[maxn][maxn];
- int pre[maxn];
- int prim(int n)
- {
- memset(path,,sizeof(path));
- memset(vis,,sizeof(vis));
- memset(used,,sizeof(used));
- vis[] = ;
- d[] = ;
- int ans = ;
- for (int i = ;i <= n;i++)
- {
- pre[i] = ;
- d[i]= mp[][i];
- }
- for (int i = ;i < n - ;i++)
- {
- int x = -,dis = inf;
- for (int j = ;j <= n;j++)
- {
- if (!vis[j] && d[j] < dis)
- {
- dis = d[j];
- x = j;
- }
- }
- vis[x] = ;
- used[x][pre[x]] = used[pre[x]][x] = ;
- ans += dis;
- for (int j = ;j <= n;j++)
- {
- if (vis[j] && j != x) path[j][x] = path[x][j] = max(dis,path[j][pre[x]]);
- if (!vis[j] && mp[x][j] < d[j])
- {
- d[j] = mp[x][j];
- pre[j] = x;
- }
- }
- }
- return ans;
- }
- int main()
- {
- int t;
- scanf("%d",&t);
- while (t--)
- {
- int n,m;
- scanf("%d%d",&n,&m);
- memset(mp,inf,sizeof(mp));
- for (int i = ;i < m;i++)
- {
- int a,b,c;
- scanf("%d%d%d",&a,&b,&c);
- mp[a][b] = mp[b][a] = min(mp[a][b],c);
- }
- int ans1 = prim(n);
- int ans2 = inf;
- for (int i = ;i <= n;i++)
- {
- for (int j = i + ;j <= n;j++)
- {
- if (used[i][j]) continue;
- ans2 = min(ans2,ans1 - path[i][j] + mp[i][j]);
- }
- }
- printf("%d %d\n",ans1,ans2);
- }
- return ;
- }
uva 10600 ACM Contest And Blackout的更多相关文章
- UVA 10600 ACM Contest and Blackout 次小生成树
又是求次小生成树,就是求出最小生成树,然后枚举不在最小生成树上的每条边,求出包含着条边的最小生成树,然后取一个最小的 #include <iostream> #include <al ...
- [ An Ac a Day ^_^ ] [kuangbin带你飞]专题八 生成树 UVA 10600 ACM Contest and Blackout 最小生成树+次小生成树
题意就是求最小生成树和次小生成树 #include<cstdio> #include<iostream> #include<algorithm> #include& ...
- UVA10600:ACM Contest and Blackout(次小生成树)
ACM Contest and Blackout 题目链接:https://vjudge.net/problem/UVA-10600 Description: In order to prepare ...
- 【UVA 10600】 ACM Contest and Blackout(最小生成树和次小生成树)
[题意] n个点,m条边,求最小生成树的值和次小生成树的值. InputThe Input starts with the number of test cases, T (1 < T < ...
- 【uva 10600】ACM Contest and Blackout(图论--次小生成树 模版题)
题意:有T组数据,N个点,M条边,每条边有一定的花费.问最小生成树和次小生成树的权值. 解法:具体请见 关于生成树的拓展 {附[转]最小瓶颈路与次小生成树}(图论--生成树) 1 #include&l ...
- UVA10600 ACM Contest and Blackout —— 次小生成树
题目链接:https://vjudge.net/problem/UVA-10600 In order to prepare the “The First National ACM School Con ...
- UVA-10600 ACM Contest and Blackout (次小生成树)
题目大意:给一张无向图,找出最小生成树和次小生成树. 题目分析:模板题...方法就是枚举所有的比最小生成树中两端点之间的最长边还要长的边,用它替换,再取一个最小的值便是次小生成树了. 代码如下: # ...
- UVA10600 ACM Contest and Blackout
用prim算法求最小生成树和次小生成树~ #include<cstdio> #include<algorithm> #include<cstring> using ...
- SDUT 2409:The Best Seat in ACM Contest
The Best Seat in ACM Contest Time Limit: 1000MS Memory limit: 65536K 题目描述 Cainiao is a university st ...
随机推荐
- js中属性类型:数据属性与访问器属性
js中属性类型分为两种:数据属性和访问器属性 在js中,对象都是由名值对构成的,名:就是我们所说的属性名,值就是属性对应的值(基本值.对象.方法). ECMA-262第5版定义了只有内部才用的特性,描 ...
- 洛谷P3247 最小公倍数 [HNOI2016] 分块+并查集
正解:分块+并查集 解题报告: 传送门! 真的好神仙昂QAQ,,,完全想不出来,,,还是太菜了QAQ 首先还是要说下,这题可以用K-D Tree乱搞过去(数据结构是个好东西昂,,,要多学学QAQ),但 ...
- 【托业】【新托业TOEIC新题型真题】学习笔记10-题库七-P7
1.to request a review of information 要求审查资料 2.inform of 将…告知(某人); 3.flammable [ˈflæməbl]adj.易燃的,可燃的; ...
- shiro 身份授权+权限认证
https://www.cnblogs.com/cmyxn/p/5825099.html
- dedecms批量修改文章为待审核稿件怎么操作
dedecms批量修改文章为待审核稿件要怎么操作呢?因为我们有时会出于某些原因要把文章暂时先隐藏掉,dedecms有一个比较好的功能是将文件状态设为未审核前台就可以看不到了,那要怎么批量设置呢?到后台 ...
- 报错解决——Your CPU supports instructions that this TensorFlow binary was not compiled to use: AVX AVX2
在导入tensorflow后,进行运算时,出现了报错Your CPU supports instructions that this TensorFlow binary was not compile ...
- NginxI/O模型理论基础
I/O模型介绍 同步IO 关注的是消息通信机制 调用者需要等待被调用者先执行完毕才能往下继续执行 被调用者在执行完自己的任务后并不会同之调用者执行结果需要调用者自己去获取被调用者的执行状态 异步 ...
- discuz论坛 模板修改
门户首页 template/rtj1009_007/portal/index.php 头部二级导航 template/rtj1009_007/common/toubu.php 底部内容文件 templ ...
- python的globals()
以字典的形式返回当前位置的全局变量
- Linux下搭建redis服务器
1.redis需要gcc的编译环境,在线安装gcc:# yum install gcc-c++ 2.上传redis的压缩包到Linux系统,解压 3.进入源码目录,编译(注意要有makefile), ...