题意:

求最小生成树和次小生成树的总权值。

思路:

第一种做法,适用于规模较小的时候,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 ;
}

最新文章

  1. hibernate 的SessionFactory的getCurrentSession 与 openSession() 的区别
  2. hihoCoder 1185 连通性&#183;三(Tarjan缩点+暴力DFS)
  3. yii框架常用url地址
  4. Spring security与shiro
  5. [转] 用实例给新手讲解RSA加密算法
  6. UIAlertController 自定义输入框及KVO监听 分类: ios技术 2015-01-20 15:33 199人阅读 评论(1) 收藏
  7. JAVA模板方法
  8. [poj3468]A Simple Problem with Integers_线段树
  9. AngularJs parent index
  10. psutil(搬运,一个月后稍后修改)
  11. STM32L476RG_中断开发与实列
  12. springboot的jar包
  13. python+appium 自动化1--启动手机京东app
  14. linux 开机自启动脚本
  15. Codeforces 841B - Godsend
  16. Hibernate学习笔记2.3(Hibernate基础配置)
  17. log Log4NET配置
  18. mode=&quot;r&quot; 和 函数末尾调用 regist()!!!!
  19. SqlServer 之 用 IP 地址连接数据库报错&quot; 在与 SQL Server 建立连接时出现与网络相关的或特定于实例的错误 &quot;
  20. DALFactory有什么作用

热门文章

  1. redis哨兵模式,数据尽量少的丢失
  2. C#-1-1-.net
  3. Entity Framework学习 - 5.DB First执行时提示model没有key
  4. 显示隐藏火车头快捷键Ctrl+t
  5. 如何用python发邮件
  6. 并发编程---死锁||递归锁---信号量---Event事件---定时器
  7. 004-mac上安装以及Nginx 配置文件nginx.conf详解
  8. Spark --- 启动、运行、关闭过程
  9. 在Java应用中通过SparkLauncher启动Spark任务
  10. 调用run与调用start的区别