(F. MST Unification)最小生成树
题目链接: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)最小生成树的更多相关文章
- CF F. MST Unification (最小生成树避圈法)
题意 给一个无向加权联通图,没有重边和环.在这个图中可能存在多个最小生成树(MST),你可以进行以下操作:选择某条边使其权值加一,使得MST权值不变且唯一.求最少的操作次数. 分系:首先我们先要知道为 ...
- CF - 1108 F MST Unification
题目传送门 题意:在一幅图中, 问需要使得多少条边加一,使得最小生成树只有一种方案. 题解:Kruskal, sort完之后,对于相通的一个边权w,我们可以分析出来有多少边是可以被放到图里面的,然后我 ...
- Codeforces 1108F MST Unification MST + LCA
Codeforces 1108F MST + LCA F. MST Unification Description: You are given an undirected weighted conn ...
- CF1108F MST Unification
题目地址:CF1108F MST Unification 最小生成树kruskal算法的应用 只需要在算法上改一点点 当扫描到权值为 \(val\) 的边时,我们将所有权值为 \(val\) 的边分为 ...
- Codeforces 1108F MST Unification(最小生成树性质)
题目链接:MST Unification 题意:给定一张连通的无向带权图.存在给边权加一的操作,求最少操作数,使得最小生成树唯一. 题解:最小生成树在算法导论中有这个性质: 把一个连通无向图的生成树边 ...
- 【AtCoder2134】ZigZag MST(最小生成树)
[AtCoder2134]ZigZag MST(最小生成树) 题面 洛谷 AtCoder 题解 这题就很鬼畜.. 既然每次连边,连出来的边的权值是递增的,所以拿个线段树xjb维护一下就可以做了.那么意 ...
- (poj)1679 The Unique MST 求最小生成树是否唯一 (求次小生成树与最小生成树是否一样)
Description Given a connected undirected graph, tell if its minimum spanning tree is unique. Definit ...
- POJ1679:The Unique MST(最小生成树)
The Unique MST Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 38430 Accepted: 14045 ...
- POJ 1679 The Unique MST 推断最小生成树是否唯一
The Unique MST Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 22715 Accepted: 8055 D ...
随机推荐
- “Linux内核分析”实验三报告
构造一个简单的Linux系统 张文俊+原创作品转载请注明出处+<Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-10000290 ...
- rabbitmq windows 安装,更改配置文件路径的问题(管理页面不显示的问题)
路径中的advanced和rabbitmq是advanced.config和rabbitmq.config的文件名而不是文件夹名 并将这两个环境变量加到path里. 完成后,执行命令:rabbitmq ...
- C语言版本:顺序表的实现
seqlist.h #ifndef __SEQLIST_H__ #define __SEQLIST_H__ #include<cstdio> #include<malloc.h> ...
- Alpha 冲刺七
团队成员 051601135 岳冠宇 051604103 陈思孝 031602629 刘意晗 031602248 郑智文 031602234 王淇 会议照片 项目燃尽图 项目进展 无进展!!!! 项目 ...
- Ubuntu忘记MySQL密码重设方法
====================忘了mysql密码,从网上找到的解决方案记录在这里==================== 结束当前正在运行的mysql进程 # /etc/init.d/mys ...
- Android 获取加速传感器的值,并去除杂音
1.注册和注销传感器 private void registerSensor() { manager.registerListener(this, manager.getDefaultSensor(S ...
- 2013长春网赛 1006 hdu 4764 Stone(巴什博弈)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4764 题意:Tang 和 Jiang 玩一个游戏,轮流写下一个数,Tang先手,第一次Tang只能写[ ...
- 淘宝卖家搜索器V1.6算法注册机。
该软件的算法非常简单,适合小白练手.(E语言写的)1.OD加载该软件,输入bp MessageBoxA 2.点击注册 3.OD就会中断下来了 4.按ALT+K打开调用堆栈 5.往上翻,就来到算法处了 ...
- MyBatis中Mapper的返回值类型
insert.update.delete语句的返回值类型 对数据库执行修改操作时,数据库会返回受影响的行数. 在MyBatis(使用版本3.4.6,早期版本不支持)中insert.update.del ...
- Spring之jdbcTemplate:增删改
JdbcTemplate增删改数据操作步骤:1.导入jar包:2.设置数据库信息:3.设置数据源:4.调用jdbcTemplate对象中的方法实现操作 package helloworld.jdbcT ...