题目链接:http://codeforces.com/contest/1108/problem/F

题目大意:给你n个点和m条边,然后让你进行一些操作使得这个图的最小生成树唯一,每次的操作是给某一条边加1,然后让你求出最小的操作数。

具体思路: 最小生成树不唯一的话,指的是至少有两条边权相等的边,这两条边中的任意一条都能构成一个最小生成树的边。那么如何避免这种局面出现?

如果两个边权相等的边在最小生成树上(可以互相替换),也就是说这两条边最这个最小生成树上的作用是可以相互替代的,那么我们在加边的时候首先考虑处理边权相等的边,这里处理的边还应该再筛选一下,我们需要处理的那些边是指的相互替代的边(如果不能相互替代,就说明这条边在最小生成树上是其他边不能替代的)。

具体过程就是先把所有边按照边权进行排序,然后再去处理矛盾的边就可以了。

AC代码:

 #include<bits/stdc++.h>
using namespace std;
# define ll long long
# define inf 0x3f3f3f3f
const int maxn = 2e5+;
struct node
{
int fr;
int to;
int cost;
} q[maxn];
bool cmp(node t1,node t2)
{
return t1.cost<t2.cost;
}
int father[maxn];
int Find(int t)
{
return t==father[t]?t:father[t]=Find(father[t]);
}
int main()
{
int n,m,t1,t2,t3;
scanf("%d %d",&n,&m);
for(int i=; i<=n; i++)
{
father[i]=i;
}
for(int i=; i<=m;i++)
{
scanf("%d %d %d",&t1,&t2,&t3);
q[i].fr=t1;
q[i].to=t2;
q[i].cost=t3;
}
sort(q+,q+m+,cmp);
int ans=;
for(int i=; i<=m; )
{
int j=i;
int num=;
while(j<=m&&q[j].cost==q[i].cost)
j++;
for(int k=i; k<j; k++)
{
int t1=Find(q[k].fr);
int t2=Find(q[k].to);
if(t1!=t2)
{
num++;
}
}
for(int k=i; k<j; k++)
{
int t1=Find(q[k].fr);
int t2=Find(q[k].to);
if(t1!=t2)
{
father[t1]=t2;
num--;
}
}
i=j;
ans+=num;
}
printf("%d\n",ans);
return ;
}

(F. MST Unification)最小生成树的更多相关文章

  1. CF F. MST Unification (最小生成树避圈法)

    题意 给一个无向加权联通图,没有重边和环.在这个图中可能存在多个最小生成树(MST),你可以进行以下操作:选择某条边使其权值加一,使得MST权值不变且唯一.求最少的操作次数. 分系:首先我们先要知道为 ...

  2. CF - 1108 F MST Unification

    题目传送门 题意:在一幅图中, 问需要使得多少条边加一,使得最小生成树只有一种方案. 题解:Kruskal, sort完之后,对于相通的一个边权w,我们可以分析出来有多少边是可以被放到图里面的,然后我 ...

  3. Codeforces 1108F MST Unification MST + LCA

    Codeforces 1108F MST + LCA F. MST Unification Description: You are given an undirected weighted conn ...

  4. CF1108F MST Unification

    题目地址:CF1108F MST Unification 最小生成树kruskal算法的应用 只需要在算法上改一点点 当扫描到权值为 \(val\) 的边时,我们将所有权值为 \(val\) 的边分为 ...

  5. Codeforces 1108F MST Unification(最小生成树性质)

    题目链接:MST Unification 题意:给定一张连通的无向带权图.存在给边权加一的操作,求最少操作数,使得最小生成树唯一. 题解:最小生成树在算法导论中有这个性质: 把一个连通无向图的生成树边 ...

  6. 【AtCoder2134】ZigZag MST(最小生成树)

    [AtCoder2134]ZigZag MST(最小生成树) 题面 洛谷 AtCoder 题解 这题就很鬼畜.. 既然每次连边,连出来的边的权值是递增的,所以拿个线段树xjb维护一下就可以做了.那么意 ...

  7. (poj)1679 The Unique MST 求最小生成树是否唯一 (求次小生成树与最小生成树是否一样)

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

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

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

  9. POJ 1679 The Unique MST 推断最小生成树是否唯一

    The Unique MST Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 22715   Accepted: 8055 D ...

随机推荐

  1. sql not in 优化问题

    问题情境: not in 耗时过长.想用join或exits代替.结果并不明显,这里先记录3种写法,以后探讨速度问题. sql语句: // not exists sql = @"select ...

  2. Objective-C语言--self和super关键字解析

    看代码: @implementation Son : Father - (id)init{ self = [super init]; if (self){ } return self; } self是 ...

  3. 蜗牛慢慢爬 LeetCode 16. 3Sum Closest [Difficulty: Medium]

    题目 Given an array S of n integers, find three integers in S such that the sum is closest to a given ...

  4. PAT 甲级 1079 Total Sales of Supply Chain

    https://pintia.cn/problem-sets/994805342720868352/problems/994805388447170560 A supply chain is a ne ...

  5. Jquery 获取屏幕及滑块及元素的高度及距离

    alert($(window).height()); //浏览器时下窗口可视区域高度 alert($(document).height()); //浏览器时下窗口文档的高度 alert($(docum ...

  6. AJAX 原生态

                                                                   AJAX   原生态 原生态AJAX详解和jquery对AJAX的封装 A ...

  7. Eclipse 使用 VS快捷键

    这里楼主也是尝试了,只能说一般吧.还是有许多没有改过来... 想要尝试的朋友,可以试试. 首先进入Eclipse 然后 接着 Name:CDT Location:http://download.ecl ...

  8. We Need More Bosses CodeForces - 1000E(缩点 建图 求桥 求直径)

    题意: 就是求桥最多的一条路 解析: 先求连通分量的个数 然后缩点建图  求直径即可 #include <bits/stdc++.h> #define mem(a, b) memset(a ...

  9. POJ 1182 食物链 (带权并查集)

    食物链 Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 78551   Accepted: 23406 Description ...

  10. MySQL的IFNULL解决判空问题

    问题:mybatis返回的null类型数据消失,导致前端展示出错 思路:如果查询出的结果是空值,应当转换成空字符串.当然在前端也能进行判断,但要求后台实现这个功能. 解决方案: 使用如下方法查询: S ...