POJ 1679-The Unique MST【最小生成树的唯一性】

次小生成树(POJ 1679 The Unique MST) 先利用prim算法求出最小生成树,然后通过往MST里加边来判断新生成的最小生成树是否具有最小的权值,POJ上The Unique MST(1679)题是要求判断最小生成树是否唯一,此题其实根本不用这样做,但是为了练习球次小生成树还是写了这样的代码,已用G++AC。 立即下载

题目描述

Given a connected undirected graph, tell if its minimum spanning tree is unique. 

Definition 1 (Spanning Tree): Consider a connected, undirected graph G = (V, E). A spanning tree of G is a subgraph of G, say T = (V', E'), with the following properties: 
1. V' = V. 
2. T is connected and acyclic. 

Definition 2 (Minimum Spanning Tree): Consider an edge-weighted, connected, undirected graph G = (V, E). The minimum spanning tree T = (V, E') of G is the spanning tree that has the smallest total cost. The total cost of T means the sum of the weights on all the edges in E'. 

Input

The first line contains a single integer t (1 <= t <= 20), the number of test cases. Each case represents a graph. It begins with a line containing two integers n and m (1 <= n <= 100), the number of nodes and edges. Each of the following m lines contains a triple (xi, yi, wi), indicating that xi and yi are connected by an edge with weight = wi. For any two nodes, there is at most one edge connecting them.

Output

For each input, if the MST is unique, print the total cost of it, or otherwise print the string 'Not Unique!'.

Sample Input

2
3 3
1 2 1
2 3 2
3 1 3
4 4
1 2 2
2 3 2
3 4 2
4 1 2

Sample Output

3
Not Unique!

题意

题意很简单,就是判断最小生成树是不是唯一的。

思路

先跑一遍Kruskal,对于树中的边,每次删除一个有重复权值的边,再跑一遍Kruskal,如果删除后得到的值与删除前相同,则最小生成树是不唯一的。

由于这道题的数据不大,我直接依次删除最小生成树的边(没有判断是否有重复的权),然后判断删除前后的值。

注意!!这道题由于权值有0的情况,所以如果删除前后的值相同,还需判断最小生成树的边是否等于n-1,若等于,则不唯一,若不等于,仍唯一。

代码

#include<iostream>
#include<cstdio>
#include<algorithm>
#include<vector>
using namespace std;

const int Maxe = 10005;
const int Maxn = 105;
struct edge{
    int from,to,val;
    bool canuse;
};
edge e[Maxe];
int par[Maxn];
int cnt;
int ct;
vector<int> v;

bool cmp(edge e1, edge e2)
{
    return e1.val<e2.val;
}
void Init()
{
    for(int i = 0; i < Maxn; i++)
        par[i] = i;
}
int Find(int x)
{
    if(x==par[x])
        return par[x];
    else
        return par[x] = Find(par[x]);
}
bool Union(int x, int y)
{
    x = Find(x);
    y = Find(y);
    if(x!=y)
    {
        par[y] = x;
        return true;
    }
    else
        return false;
}
int Kruskal(int x)
{
    int res = 0;
    Init();
    for(int i = 0; i < cnt; i++)
    {
        if(e[i].canuse&&Union(e[i].from, e[i].to))
        {
            ct++;
            res+=e[i].val;
            if(x==0)
                v.push_back(i);
        }
    }
    return res;
}


int main()
{
    int t,n,m,val;
    bool flag;
    scanf("%d", &t);
    while(t--)
    {
        scanf("%d %d", &n, &m);
        cnt = m;
        ct = 0;
        flag = true;
        v.clear();
        for(int i = 0; i < m; i++)
        {
            scanf("%d %d %d", &e[i].from, &e[i].to, &e[i].val);
            e[i].canuse = true;
        }
        sort(e,e+cnt,cmp);
        val = Kruskal(0);
        for(int i = 0; i < v.size(); i++)
        {
            ct = 0;
            e[v[i]].canuse = false;
            if(val==Kruskal(1)&&ct==n-1)
            {
                flag = false;
                break;
            }
            e[v[i]].canuse = true;
        }
        if(flag)
            printf("%d\n", val);
        else
            printf("Not Unique!\n");
    }
    return 0;
}

如有错误请指明~   ฅ●ω●ฅ

Django Cookie/Session Cookie是一种小型的文本文件,通常由Web服务器发送到用户浏览器,并存储在用户的本地计算机上。当用户再次访问该网站时,浏览器会将Cookie发送回服务器,从而实现用户身份验证、个性化设置等功能。Session是一种在服务器端存储用户会话信息的方式。与Cookie不同,Session数据存储在服务器上,而不是客户端。Django框架通过在客户端存储一个Session ID来实现Session的跟踪。Django框架的Cookie/Session机制为开发者提供了方便的数据存储和会话管理功能。 阅读详情

相关推荐

网格聚类 Grid Clustering/Grid-based Clustering

本文主要简单介绍了网格聚类的基本概念,优缺点,应用场景,建模时的注意事项,评价指标,实现方法,python示例和模型参数等。

JasonH2021的博客 4827

PTA-最小生成树的唯一性-(最小生成树的边权地位)

最小生成树的唯一性 题意: 就是给你n点个m条边,问你是否能这个图的最小生成树是唯一的,如果唯一输出最小生成树的权值,不唯一输出一共有多少连通块。 思考: 其实乍一看判断最小生成树是否唯一感觉像是见过,但是怎么也想不到,那就是没做过,只是见过罢了。然后我就想,是否唯一该怎么判断呢,之前做过两道都是用最小生树相同边权的地位都是相同的性质,我感觉如果在合并之前有res个边需要用,但是到了合并的时候只有res_t个了,也就是某些边可以用可以不用,只要出现这种情况那么这个最小生成树就不是唯一的。其余的操作就很简单了

m0_52398496的博客 1217

CCD 技术介绍(基于innovus引擎CCOpt)

CCD:全称是,并行优化clock和data path。CCOpt:全称是Clock的timing分为两种模式,和。preCTS并没有clock,因此需要建立一个,从clock端口到寄存器CK端的来自sdc中的设置;postCTSupdateIO latency,clock就会自动的转换成propagatedclock,这时就是实际时钟互连线网络的delay。在实际设计中,clock起始于ideal。

m0_61003348的博客 8975

POJ 1679 The Unique MST 【判断最小生成树是否唯一】

Description Given a connected undirected graph, tell if its minimum spanning tree is unique. Definition 1 (Spanning Tree): Consider a connected, undirected graph G = (V, E). A spanning tree of G is...

weixin_34379433的博客 232

Ubuntu升级遇到grub-efi-amd64-signed安装失败?3步搞定这个烦人错误

本文深度解析Ubuntu系统升级时grub-efi-amd64-signed安装失败并提示“cannot find EFI directory”错误的根本原因。该错误通常由EFI系统分区挂载异常、BIOS/UEFI引导模式不匹配或dpkg包状态死锁导致。文章提供了三步精准修复流程:首先检查并修复ESP分区挂载,其次处理dpkg依赖问题,最后针对传统BIOS系统提供适配方案,帮助用户安全彻底地解决这一常见升级难题。

r7s8t的博客 398

Discuz IIS上传附件大于28M失败报错Upload Failed.修改maxAllowedContentLength(图文教程)

下图:Discuz X3.5的系统信息,上传许可为1024MB(1GB)论坛为局域网论坛,仅供内部同事交流使用!使用官方最新的Discuz! X3.5 Release 20231221 UTF-8 下图:选择上传附件(提示可以最大上传100M) 下图:模拟上传84M的文件(

骚团长的博客 1828

POJ 1679 (次最小生成树)

题目: Given a connected undirected graph, tell if its minimum spanning tree is unique. Definition 1 (Spanning Tree): Consider a connected, undirected graph G = (V, E). A spanning tree of G is a subgrap...

weixin_44757834的博客 273

grafana使用方法

1、点击仪表盘2、新建仪表盘3、选择数据源4、选择查询的条件5、美化。

2403_87359664的博客 323

最小生成树的唯一性

进阶实验6-3.6 最小生成树的唯一性 (35 分) 给定一个带权无向图,如果是连通图,则至少存在一棵最小生成树,有时最小生成树并不唯一。本题就要求你计算最小生成树的总权重,并且判断其是否唯一。 输入格式: 首先第一行给出两个整数:无向图中顶点数N(≤500)和边数M。随后M行,每行给出一条边的两个端点和权重,格式为“顶点1 顶点2 权重”,其中顶点从 1 到N编号,权重为正整数。题目保证最小生成树的总权重不会超过2​30​​。 输出格式: 如果存在最小生成树,首先在第一行输出其总权重...

beyondzty的博客 3237

西电计组实验一 存储器实验

计组实验报告 实验一 存储器实验——FPGA中LPM_ROM定制与读出实验 一.实验目的   1.掌握FPGA中lpm_ROM的设置,作为只读存储器ROM的工作特性和配置方法;   2.用文本编辑器编辑mif文件配置ROM,学习将程序代码以mif格式文件加载于lpm_ROM中;   3.在初始化存储器编辑窗口编辑mif文件配置ROM;   4.验证FPGA中mega_lpm_ROM的功能。 二.实验原理   ALTERA的FPGA中有许多可调用的LPM (Library Parameterized Modu

Polaris的博客 1万+

抖音直播小风车跳转企业微信全攻略:企业号申请+落地页配置详解

本文详细解析了抖音直播小风车跳转企业微信的全流程,包括企业号申请、小风车配置和落地页优化。通过实战指南,帮助企业高效实现私域流量沉淀,提升直播转化率,特别适合电商和营销从业者参考。

weixin_29289821的博客 613

POJ 1679-The Unique MST( 判断最小生成树的唯一性)

B - The Unique MST Time Limit:1000MS     Memory Limit:10000KB     64bit IO Format:%I64d & %I64u Submit Status Practice POJ 1679 Appoint description:  System Crawler  (2015-11-12) Desc

梧桐下的四叶草 1631

CKA-题库-简洁参考答案-反复练习20遍-必过!!!

新版CKA考试已于2020年9月1日正式上线! 考试模式:线上考试 考试时间:2小时 认证有效期:3年 软件版本:Kubernetes v1.19 重考政策:可接受1次重考 经验水平:中級 题目数量:17题 题库量小:随机的题目重复率极高 考试时可打开两个浏览器Tab,一个是考试窗口,一个用来查阅官方文档](https://kubernetes.io/docs/) 01 Task - 英文 Create a new ClusterRole named deployment-clusterrole tha.

随笔记录-分享&记忆 7315

The Unique MST POJ - 1679最小生成树的唯一性

Given a connected undirected graph, tell if its minimum spanning tree is unique. Definition 1 (Spanning Tree): Consider a connected, undirected graph G = (V, E). A spanning tree of G is a subgraph of ...

weixin_44488944的博客 252

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

(最小生成树唯一性)POJ 1679 - The Unique MST

题意: 给定一个无向带权图,判断这个图是否有唯一的最小生成树,如果有输出最小生成树,否则输出Not Unique! 分析: 模板题,但是对于判断唯一性,有一定的小技巧,先算出整个图的最小生成树,记录这个最小生成树的所有边,然后在整个图中枚举把之前最小生成树删掉一条边,再求最小生成树,一旦出现相同的总权值,就不行了。 然后Kruskal算法反正很快,我发现最小生成树的解决...

dijieluan7764的博客 260

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

判断最小生成树的唯一性(POJ 1679 The Unique MST)

题目传送门 我们都知道,最小生成树(MST)是不唯一的,那么怎么才能判断最小生成树是否唯一呢? 首先来分析一下MST不唯一的原因; 举个题目中的样例2: 4 4 1 2 2 2 3 2 3 4 2 4 1 2 假设以上的边的编号为1 2 3 4 构造MST的时候,可以选择边 1 2 3 ,也可以选择边 2 3 4 。 可以看出,在构造MST的时候,有可能可以选择不同的

Akatsuki 3924

Poj 1679 The Unique MST (最小生成树唯一性判定)

题目链接:http://poj.org/problem?id=1679 题意:给定的图是否具有唯一的最小生成树。 思路:看到网上的代码都是用次小生成树解的,但其实不用那么麻烦。 利用Prim算法求最小生成树,选择最小边时进行判断:是否有两个或以上的未选择顶点到已选顶点集合的权值相等的,若有则最小生成树不唯一。同时在松弛计算的时候也要 对刚加进的顶点进行权值是否相等的判断。 #in

whyorwhnt的专栏 3930

POJ 1679 The Unique MST 判断最小生成树唯一性

从一颗MST到另一颗MST只删除修改一条边再添加一条边 cnt1表示在权值相同时可以加入最小生成树的边数 cnt2表示在权值相同时被加入最小生成树的边数 如果可选择=加入则唯一 如果可选择&gt;加入则不唯一 #include&lt;cstdio&gt; #include&lt;algorithm&gt; using namespace std; const int maxn = 20...

Barry&Liu 278

poj 1679 The Unique MST【次小生成树】【判断最小生成树的唯一性】

The Unique MST Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 29428   Accepted: 10530 Description Given a connected undirected graph, tell if its minimum sp

逝去的时光 388

POJ-1679 The Unique MST (判断最小生成树的唯一性)

<题目链接> 题目大意: 给定一张无向图,判断其最小生成树是否唯一。 解题分析: 对图中每条边,扫描其它边,如果存在相同权值的边,则标记该边;用kruskal求出MST。 如果MST中无标记的边,则该MST唯一;否则,在MST中依次去掉标记的边,再求MST,若求得MST权值和原来的MST 权值相同,则MST不唯一。 #include <cstdio> #i...

weixin_30782293的博客 197

POJ1679 The Unique MST(Kruskal)(最小生成树的唯一性)

The Unique MST Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 27141 Accepted: 9712 Description Given a connected undirected graph, tell if its minimum spann...

weixin_33796177的博客 117

【POJ1679】The Unique MST-次小生成树(判断最小生成树唯一性)

【POJ1679】The Unique MST-次小生成树(判断最小生成树唯一性)

Maxwei_wzj的OI世界 597

(kruscal12.3.4)POJ 1679 The Unique MST(判断最小生成树的唯一性||次小生成树)

#include #include #include #include using namespace std; struct edge { int begin; int end; int weight; }; const int maxn = 110; int father[maxn]; edge e[maxn * maxn]; int map[maxn][maxn]; in

黄俊东的专栏 1322

POJ 1679 The Unique MST

POJ 1679 The Unique MST Description Given a connected undirected graph, tell if its minimum spanning tree is unique. Definition 1 (Spanning Tree): Consider a connected, undirected graph G = (V, E). A ...

旺崽的博客 2942

Poj 1679 The Unique MST

题目描述: 给定一个连通无向网,判定它的最小生成树是否唯一。 输入描述: 输入文件的第1 行为一个整数t,1≤t≤20,表示测试数据的数目。每个测试数据描述了一个 连通无向网。每个测试数据的第1 行为两个整数:n 和m,1≤n≤100,分别表示顶点的数目和 边的数目。接下来有m 行,每行为一个三元组(xi, yi, wi),表示一条边(xi, yi),xi 和yi 表示边的两 个顶点,

Paradiser 919

POJ-1679-The Unique MST

POJ-1679-The Unique MST http://poj.org/problem?id=1679 次小生成树,prim稍作改变即可,每次加入新的顶点时,如果有不止一条权值最小的最短边,则说明最小生成树不只一种 #include #include #include #include using namespace std; #define N 105 #define INF 9

菜鸟的程序人生 2382
上一篇: POJ 3026-Borg Maze【最小生成树+bfs】
下一篇: ECNA2017 F-Keeping On Track【图的搜索】
include_peng
博客等级 码龄9年 1粉丝 9原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值