【题目大意】

共T组数据,对于每组数据,给你一个n个点,m条边的图,设图的最小生成树为MST,次小生成树为ans,若MST=ans,输出Not Unique!,否则输出MST

【题解】

很明确,先求MST再求ans。

关于求次小生成树,我打算写一个总结,先留个坑。

 #include<iostream>
#include<cstdio>
#include<cstdlib>
#include<cstring>
#include<cmath>
#include<ctime>
#include<algorithm>
using namespace std;
const int INF=~0u>>;//正无穷
struct node{int x,y,v;}E[];
struct Node{int y,next,v;}e[];
int T,n,m,len,mst,ans(INF),Link[],f[],vis[],map[][],flag[][],dp[][];
inline int read()
{
int x=,f=; char ch=getchar();
while(!isdigit(ch)) {if(ch=='-') f=-; ch=getchar();}
while(isdigit(ch)) {x=x*+ch-''; ch=getchar();}
return x*f;
}
void insert(int x,int y,int v) {e[++len].next=Link[x];Link[x]=len;e[len].y=y;e[len].v=v;}
int find(int x) {return f[x]==x?x:f[x]=find(f[x]);}
bool cmp(node a,node b) {return a.v<b.v;}
void Kruskal()
{
sort(E+,E+m+,cmp);
for(int i=;i<=m;i++)
{
int x=find(E[i].x),y=find(E[i].y);
if(x!=y)
{
f[x]=y;
mst+=E[i].v;
flag[E[i].x][E[i].y]=flag[E[i].y][E[i].x]=;
}
}
for(int i=;i<=n;i++)
for(int j=i+;j<=n;j++)
if(flag[i][j]) {insert(i,j,map[i][j]); insert(j,i,map[j][i]);}
}
void dfs(int st,int x,int v)
{
vis[x]=;
dp[st][x]=v;
for(int i=Link[x];i;i=e[i].next)
if(!vis[e[i].y]) dfs(st,e[i].y,max(dp[st][x],e[i].v));
}
void pre()
{
memset(Link,,sizeof(Link));
memset(flag,,sizeof(flag));
memset(dp,,sizeof(dp));
len=mst=; ans=INF;
for(int i=;i<=n;i++) f[i]=i;
for(int i=;i<=n;i++)
for(int j=;j<=n;j++)
map[i][j]=(i==j?:INF);
}
int main()
{
freopen("cin.in","r",stdin);
freopen("cout.out","w",stdout);
T=read();
while(T--)
{
n=read(); m=read();
pre();
for(int i=;i<=m;i++)
{
int x=read(),y=read(),v=read();
map[x][y]=map[y][x]=v;
E[i].x=x; E[i].y=y; E[i].v=v;
}
Kruskal();
for(int i=;i<=n;i++) {memset(vis,,sizeof(vis)); dfs(i,i,);}
for(int i=;i<=n;i++)
for(int j=i+;j<=n;j++)
if(!flag[i][j]&&map[i][j]!=INF) ans=min(ans,mst+map[i][j]-dp[i][j]);
if(ans==mst) printf("Not Unique!\n");
else printf("%d\n",mst);
}
return ;
}

【poj1679】The Unique MST的更多相关文章

  1. 【题解】 AT2134 Zigzag MST

    [题解]AT2134 Zigzag MST 一道MST好题 \(Anson\)有云: 要么是减少边的数量. 要么是改变连接边的方式. 那么如何减少边的数量呢?很简单,把所有不可能对答案产生贡献的边去掉 ...

  2. 【LeetCode】95. Unique Binary Search Trees II 解题报告(Python)

    [LeetCode]95. Unique Binary Search Trees II 解题报告(Python) 标签(空格分隔): LeetCode 作者: 负雪明烛 id: fuxuemingzh ...

  3. 【POJ 1679】 The Unique MST

    [题目链接] 点击打开链接 [算法] 先求出图的最小生成树 枚举不在最小生成树上的边,若加入这条边,则形成了一个环,如果在环上且在最小生成树上的权值最大的边等于 这条边的权值,那么,显然最小生成树不唯 ...

  4. 【KM】BZOJ1937 [Shoi2004]Mst 最小生成树

    这道题拖了好久因为懒,结果1A了,惊讶∑( 口 || [题目大意] 给定一张n个顶点m条边的有权无向图.现要修改各边边权,使得给出n-1条边是这张图的最小生成树,代价为变化量的绝对值.求最小代价之和. ...

  5. POJ1679:The Unique MST(最小生成树)

    The Unique MST Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 38430   Accepted: 14045 ...

  6. 【POJ 1679 The Unique MST】最小生成树

    无向连通图(无重边),判断最小生成树是否唯一,若唯一求边权和. 分析生成树的生成过程,只有一个圈内出现权值相同的边才会出现权值和相等但“异构”的生成树.(并不一定是最小生成树) 分析贪心策略求最小生成 ...

  7. 【POJ 1679】The Unique MST(次小生成树)

    找出最小生成树,同时用Max[i][j]记录i到j的唯一路径上最大边权.然后用不在最小生成树里的边i-j来替换,看看是否差值为0. #include <algorithm> #includ ...

  8. 【LeetCode】95. Unique Binary Search Trees II

    Unique Binary Search Trees II Given n, generate all structurally unique BST's (binary search trees) ...

  9. 【LeetCode】96 - Unique Binary Search Trees

    Given n, how many structurally unique BST's (binary search trees) that store values 1...n? For examp ...

随机推荐

  1. canvas 绘制文本

    <!DOCTYPE html> <html> <head lang="en"> <meta charset="UTF-8&quo ...

  2. JAVA如何以追加的方式向文件中写入信息?

    以FileWriter类为例: FileWriter的构造方法中有一个方法是:FileWriter(String fileName, boolean append)  ,其中第二个参数决定了写文件的方 ...

  3. 2 分支语句——《Swift3.0 从入门到出家》

    2 分支语句 当程序面临多个选择,每一个选择都会执行不同的代码块,这个时候就要使用分支语句.常见的分支语句有: if 选择语句:if... if…else if…elseif…else if是现实生活 ...

  4. FastAdmin 在线命令生成时出错的分析

    FastAdmin 在线命令生成时出错的分析 出错现象 版本环境 FastAdmin 版本:1.0.0.20180806_beta 在线命令插件版本:1.0.3 分析 2018-08-13 16:12 ...

  5. 【转】eclipse + Pydev 配置Python开发环境

    原文网址:http://www.cnblogs.com/dflower/archive/2010/05/13/1734522.html 1. 下载并安装python,由于3.1版本貌似存在很多兼容问题 ...

  6. 关于Gateway

    为什么要有gateway?就是因为如果没有,很多的功能需要在在每个微服务中都实现,这样成本很高.

  7. .NET4缓存过期策略摘录

    以下是网上搜索的资料,仅供参考: 资料一:ASP.NET缓存中Cache过期的三种策略(转自51CTO) 我们在页面上添加三个按钮并双击按钮创建事件处理方法,三个按钮使用不同的过期策略添加ASP.NE ...

  8. Java-Maven-Runoob:Maven 自动化构建

    ylbtech-Java-Maven-Runoob:Maven 自动化构建 1.返回顶部 1. 自动化构建定义了这样一种场景: 在一个项目成功构建完成后,其相关的依赖工程即开始构建,这样可以保证其依赖 ...

  9. thinkphp遇到的小问题,js文件中U方法不被解析

    我想在js文件中写ajax, 写完发现异常, 本以为是js文件中不支持ajax 后来发现时地址解析错误. 也就是U方法在js文件中不被解析. 貌似thinkphp解析,tpl文件中的一些元素. js文 ...

  10. ubuntu 14.04 no valid active connections found

    ubuntu 14.04 强制重启后出现不能上网,点击connection information 后出现error: no valid active connections found 解决办法是在 ...