次小生成树模板,别忘了判定不存在最小生成树的情况

#include <iostream>
#include <cstdio>
#include <cstring>
using namespace std; const int maxn = + ;
const int inf = 0x3f3f3f3f;
int MAX[maxn][maxn], mp[maxn][maxn], dis[maxn], pre[maxn];
int t, n, m;
bool vis[maxn], used[maxn][maxn];
inline int min( int a,int b ){
return a<b ? a:b;
} inline int max( int a, int b ){
return a>b ? a:b;
} inline int prim(){
int res = ;
memset( vis, , sizeof(vis) );
memset( used, , sizeof(used) );
memset( MAX, , sizeof(MAX) );
for( int i=; i<=n; i++ ){
pre[i] = ;
dis[i] = mp[i][];
}
vis[] = ;
dis[] = pre[] = ;
for( int i=; i<n; i++ ){
int minid, MIN = inf;
for( int j=; j<=n; j++ ) if( !vis[j] && MIN>dis[j] ) MIN = dis[minid=j];
if( MIN==inf ) return -; //不存在最小生成树
res += MIN;
vis[minid] = ;
used[minid][pre[minid]] = used[pre[minid]][minid] = ;
for( int j=; j<=n; j++ ){
if( vis[j] ) MAX[minid][j] = MAX[j][minid] = max( dis[minid], MAX[j][pre[minid]] );
if( !vis[j] && dis[j]>mp[minid][j] ){
pre[j] = minid;
dis[j] = mp[minid][j];
}
}
}
return res;
} int main(){
scanf("%d", &t);
while( t-- ){
scanf("%d%d", &n, &m);
memset( mp, inf, sizeof(mp) );
for( int i=; i<m; i++ ){
int u, v, w;
scanf("%d%d%d", &u, &v, &w);
mp[u][v] = mp[v][u] = w;
}
int min_ans = prim(), ans = inf;
if( min_ans==- ){ printf("Not Unique!\n"); continue; } //不存在最小生成树
for( int i=; i<=n; i++ )
for( int j=i+; j<=n; j++ )
if( mp[i][j]!=inf && !used[i][j] )
ans = min( ans, min_ans+mp[i][j]-MAX[i][j] );
if( ans==min_ans ) printf("Not Unique!\n");
else printf("%d\n", min_ans);
} return ;
}

最新文章

  1. [Python] from scipy import sparse 报 DLL load failed:找不到指定模块错误
  2. JavaScript(四) Window窗体操作
  3. [转]看懂UML类图
  4. 平时一些mysql小技巧及常识
  5. php emoji处理微信表情
  6. web server &amp;&amp; web framework角色区分
  7. MySQL双机热备份
  8. 大数据下Limit使用(MySQL)
  9. 【wikioi】1108 方块游戏(模拟)
  10. python os模块sys模块常用方法
  11. Android布局管理器(线性布局)
  12. TreeView无刷新获取text及value
  13. Thinkphp excel导入导出
  14. Power Strings(kmp妙解)
  15. TestNg它@Factory详细解释------如何更改参数值测试
  16. 关于解决mysql数据库乱码的问题
  17. freemarker基本数据类型
  18. (三十三)Xcode项目的重要工程文件
  19. 使用XStream是实现XML与Java对象的转换(2)--别名
  20. EasyUI之DataGird动态组合列

热门文章

  1. 【LOJ3099】[SNOI2019]积木(搜索)
  2. GitHub: Oracle RAC Database on Docker 未测试 改天试试
  3. 解决netty客户端接收报文不完整的情况
  4. (谷歌浏览器)前端以FormData类形成表单(含文件),通过ajax提交,PHP后端$_POST数组为空
  5. Entity framework Core 数据库迁移
  6. js获取对象的属性个数
  7. Kubernetes Storage Persistent Volumes
  8. Tensorflow在python3.7版本的运行
  9. Git下载安装及设置详细教程
  10. python day 18: thinking in UML与FTP作业重写