poj1679(次小生成树)
题意:判断最小生成树是否唯一,如果唯一则是输出最小长度;否则输出 Not Unique!
其中:枚举每条不在最小生成树上的边,并把这条边放到最小生成树上面,然后就一定形成环,那么我们将这条环中取出最长的一条路。最终我们得到的权值便是最小生成树的权值。
Max[i][j]
表示的最小生成树中的点i到点j之间的最长距离。Max[u][j]=max(Max[j][p[u]],dist[u])
#include<iostream>
#include<algorithm>
#include<cstring>
#include<cmath>
#include<cstdio>
using namespace std;
const int maxn=505;
const int inf=0x3f3f3f3f;
int p[maxn];
int cost[maxn][maxn];
int dist[maxn];
int vis[maxn];
int Max[maxn][maxn];
int used[maxn][maxn];
int n,m;
int Prim(){memset(vis,0,sizeof(vis));memset(p,0,sizeof(p));memset(Max,0,sizeof(Max));memset(used,0,sizeof(used));int mincost=0;p[1]=-1;for(int i=2;i<=n;i++){dist[i]=cost[1][i];p[i]=1;}dist[1]=0;vis[1]=1;for(int i=2;i<=n;i++){int temp=inf;int t=-1;for(int j=1;j<=n;j++){if(!vis[j]&&dist[j]<temp){temp=dist[j];t=j;}}if(temp==inf)return -1;mincost+=dist[t];vis[t]=1;used[t][p[t]]=used[p[t]][t]=1;//记录最小生成树之间相连的两点 Max[t][p[t]]=Max[p[t]][t]=temp;for(int j=1;j<=n;j++){if(vis[j]&&j!=t){Max[j][t]=Max[t][j]=max(Max[j][p[t]],dist[t]);//记录最小生成树之间的次短路路径长度 }if(cost[t][j]<inf){if(!vis[j]&&dist[j]>cost[t][j]){dist[j]=cost[t][j];p[j]=t;}}}}return mincost;
}
//枚举出所有不属于最小生成树的边(u,v),并且用w(u,v)来替代最大权值和Max(u,v)
int second_prim(int minst){int ans=inf;for(int i=1;i<=n;i++){for(int j=1+i;j<=n;j++){if(!used[i][j]&&cost[i][j]!=inf){ans=min(ans,minst+cost[i][j]-Max[i][j]);}}}if(ans==inf)return -1;return ans;
}
int main(){int t;scanf("%d",&t);while(t--){scanf("%d %d",&n,&m);for(int i=1;i<=n;i++){dist[i]=inf;for(int j=1;j<=n;j++){if(i==j){cost[i][j]=0;}else{cost[i][j]=inf;} }}for(int i=1;i<=m;i++){int a,b,dists;scanf("%d %d %d",&a,&b,&dists);cost[a][b]=cost[b][a]=dists;}int Minst=0;Minst=Prim();if(Minst==-1){cout<<"Not Unique!"<<endl;continue;}int second_min=second_prim(Minst);if(second_min==Minst){cout<<"Not Unique!"<<endl;}else{cout<<Minst<<endl;} }return 0;
}
poj1679(次小生成树)相关推荐
- 次小生成树(POJ1679/CDOJ1959)
POJ1679 首先求出最小生成树,记录权值之和为MinST.然后枚举添加边(u,v),加上后必形成一个环,找到环上非(u,v)边的权值最大的边,把它删除,计算当前生成树的权值之和,取所有枚举加边后生 ...
- POJ1679 Luogu4180 次小生成树
The Unique MST Given a connected undirected graph, tell if its minimum spanning tree is unique. Defi ...
- 【POJ1679】The Unique MST(非严格次小生成树)
problem 给出一个连通无向图,判断它的最小生成树是否唯一 如果唯一,输出生成树的大小,否则输出"Not Unique!" solution 直接求非严格次小生成树 如果次小生 ...
- (POJ-1679)次小生成树模板
原题链接:http://poj.org/problem?id=1679 The Unique MST Given a connected undirected graph, tell if its m ...
- POJ 1679 - The Unique MST(次小生成树)
题目链接 https://vjudge.net/problem/POJ-1679 Given a connected undirected graph, tell if its minimum spa ...
- poj 1679 次小生成树
次小生成树的求法: 1.Prime法 定义一个二维数组F[i][j]表示点i到点j在最小生成树中的路径上的最大权值.有个知识就是将一条不在最小生成树中的边Edge加入最小生成树时,树中要去掉的边就是E ...
- HDU4081(次小生成树)
1.其中:枚举每条不在最小生成树上的边,并把这条边放到最小生成树上面,然后就一定形成环,那么我们将这条环中取出最长的一条路.最终我们得到的权值便是最小生成树的权值. Max[i][j]表示的最小生成树 ...
- 模板 - LCA最近公共祖先(倍增法、Tarjan、树上差分、LCA优化的次小生成树)
整理的算法模板合集: ACM模板 注意x和y的LCA可以是x或者y本身 一.LCA的在线倍增算法 /*给定一棵包含 n个节点的有根无向树,有 m个询问,每个询问 给出了一对节点的编号 x和 y,询问 ...
- 解题报告:luogu P4180 [BJWC2010]严格次小生成树(次小生成树、倍增LCA优化、O(mlogn) )
P4180 [BJWC2010]严格次小生成树 次小生成树有两种,一种是不严格次小生成树,也就是可以数值上等于最小生成树,一种是严格次小生成树,是权值严格大于最小生成树,两种求法大同小异. 方法2在严 ...
- 最小生成树(kruskal、prim、最小生成森林问题、严格次小生成树)
整理的算法模板合集: ACM模板 目录 一.kruskal算法 二.prim算法 三.Boruvka算法 四.生成森林问题(K颗树) 五.最小生成树的唯一性 六.严格次小生成树 LCA优化的次小生成树 ...
最新文章
- 范数介绍及C++/OpenCV/Eigen的三种实现
- Horizon Is Easy, Horizon Is Complex
- 手机吸费软件肆意捞金,通过代码签名证书加以防范
- python 字符串转字典,字典转字符串 Expecting property name enclosed in double quotes
- Educational Codeforces Round 56 Editorial
- NYOJ 595 乱七八糟
- Android 服务器推送技术
- html 怎么置顶表格,表格(Table)表头固定,内容上滚【5个实例】
- 2021年吉林高考成绩怎么查询,2021年吉林高考成绩查询登录网址入口怎么查 附查询方法...
- 大会预告 | 第一届中国情感计算大会
- Fiddler详解-Fiddler Classic
- 获取自身进程结构和csrss.exe进程结构 explorer.exe进程结构
- 《测绘综合能力》——摄影测量与遥感
- swift 数组遍历 forEach 、enumerated、iterator、indices
- 《谷物大脑》书中的精髓:如何通过四星期行动计划打造健康身体?
- damon ps2 android,DamonPS2模拟器
- 计算机策略编辑器,组策略及组策略编辑器基础知识
- 您可能不知道WooCommerce可以做的10件事
- 【php】empty()详解
- 35岁后最可怕的事,就是成为职场中的奢侈品
热门文章
- Vue之概述、基本使用、data数据和if条件渲染
- 王爽 汇编语言第三版 监测点9.2 监测点9.3 补全编程,利用jcxz指令,利用loop指令,实现在内存2000H段中查找第一个值为0的字节,
- 2007年上半年 网络工程师 上下午试卷【附带答案】
- 写论文神器APEX-NET:自动重新绘制图像
- 基于OpenCV的直方图匹配
- linux系统资源监控
- laravel 如何自定义全局的方法/类
- [Math]理解卡尔曼滤波器 (Understanding Kalman Filter)
- 【JavaScript】AJAX教程
- Qt 小技巧之“To-Do 事项”