51nod 1640 MST+二分
http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1640


这样阴沉的天气持续下去,我们不免担心起他的健康。
两个正整数N,M。(1 <= N <= 10^5, N <= M <= 2 * 10^5) 接下来M行,每一行有三个整数A, B, V。(1 <= A, B <= N, INT_MIN <= V <= INT_MAX) 保证输入数据合法。
输出一个正整数R,表示符合条件的魔法阵的魔力值之和。
4 6
1 2 3
1 3 1
1 4 7
2 3 4
2 4 5
3 4 6
12
#include<bits/stdc++.h> //二分650ms
using namespace std;
#define LL long long
struct Edge
{
int u,v,w;
bool operator<(const Edge &t)const{
return w<t.w;
}
}e[];
int f[];
int getf(int v){return f[v]==v?f[v]:f[v]=getf(f[v]);}
bool ok(int k,int N,int M)
{
for(int i=;i<=N;++i) f[i]=i;
for(int i=;i<M&&e[i].w<=k;i++){
int fu=getf(e[i].u),fv=getf(e[i].v);
if(fv!=fu){
N--;
f[fv]=fu;
}
if(N==) return ;
}
return ;
}
int main()
{
int N,M,i,j,l=,r=;
cin>>N>>M;
for(i=;i<M;++i){
scanf("%d%d%d",&e[i].u,&e[i].v,&e[i].w);
l=min(l,e[i].w);
r=max(r,e[i].w);
}
sort(e,e+M);
LL ans=;
while(l<r){
int mid=l+((r-l)>>);
if(ok(mid,N,M)){
r=mid;
}
else{
l=mid+;
}
}
for(int i=;i<=N;++i) f[i]=i;
Edge e1{-,-,l};
int ed=upper_bound(e,e+M+,e1)-e;
for(int i=ed;i>=;--i){
if(e[i].w>l) continue;
int fu=getf(e[i].u),fv=getf(e[i].v);
if(fv!=fu){
ans+=e[i].w;
N--;
f[fv]=fu;
}
if(N==) break;
}
printf("%lld\n",ans);
return ;
}
#include<bits/stdc++.h> //300ms
using namespace std;
#define LL long long
struct Edge
{
int u,v,w;
bool operator<(const Edge &t)const{
return w<t.w;
}
}e[];
int f[];
int getf(int v){return f[v]==v?f[v]:f[v]=getf(f[v]);}
int ok(int k,int N,int M)
{
for(int i=;i<=N;++i) f[i]=i;
for(int i=;i<M;i++){
int fu=getf(e[i].u),fv=getf(e[i].v);
if(fv!=fu){
N--;
f[fv]=fu;
}
if(N==) return i;
}
return -;
}
int main()
{
ios::sync_with_stdio(false);
int N,M,i,j,l=,r=;
cin>>N>>M;
for(i=;i<M;++i){
cin>>e[i].u>>e[i].v>>e[i].w;
}
sort(e,e+M);
LL ans=;
l=ok(,N,M);
while(l<M&&e[l+].w==e[l].w) l++;
for(int i=;i<=N;++i) f[i]=i;
for(int i=l;i>=;--i){
int fu=getf(e[i].u),fv=getf(e[i].v);
if(fv!=fu){
ans+=e[i].w;
N--;
f[fv]=fu;
}
if(N==) break;
}
printf("%lld\n",ans);
return ;
}
51nod 1640 MST+二分的更多相关文章
- 51nod 1640 天气晴朗的魔法 二分 + 克鲁斯卡算法(kruskal算法) 做复杂了
http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1640 一开始想的时候,看到要使得最大值最小,那这样肯定是二分这个最大值了 ...
- 51Nod - 1640 天气晴朗的魔法 大+小生成树(最大值最小)/二分
天气晴朗的魔法 这样阴沉的天气持续下去,我们不免担心起他的健康. 51nod魔法学校近日开展了主题为“天气晴朗”的魔法交流活动. N名魔法师按阵法站好,之后选取N - 1条魔法链将所有魔法师的 ...
- 51nod 1640 天气晴朗的魔法 最小生成树
题目链接: http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1640 题解: 先求最小生成树,记录最大边. 然后求最大生成树 ...
- 51nod 1640 天气晴朗的魔法
题目来源: 原创 基准时间限制:1 秒 空间限制:131072 KB 分值: 20 难度:3级算法题 这样阴沉的天气持续下去,我们不免担心起他的健康. 51nod魔法学校近日开展了主题为“天气晴朗 ...
- 51nod 1267【二分】
思路: 首先我们能够很容易地想到,4个数的和,拆成两两相加:a+b=-c-d; 我们也能很轻松地求出两两之和,但是呢..不同的和会存在相同的值相加,所以还要排除这个条件.具体操作就是标记一下,然后将和 ...
- 51nod 1272【二分+RMQ】
思路: 这题不能说是长见识,倒是第一次写这么富有套路的题,倒着来,二分区间嘛,这个很简单啊,二分的条件查询一个当前区间的最小值是不是比那个特定的值小,一步步缩小,这就是二分嘛,然后查询用线段树的RMQ ...
- 51nod——1640 天气晴朗的魔法 有边权限制的最大生成树
好好读题嗷:“所以我们要求阵中的魔法链的魔力值最大值尽可能的小,与此同时,魔力值之和要尽可能的大.” 第一条件是生成树的最大边权更小,第二条件是在最大边权的限制下搞一个最大生成树. 至于最大生成树,如 ...
- BZOJ 2654 & 玄学二分+MST
题意: 给一张图,边带权且带颜色黑白,求出一棵至少包含k条白边的MST SOL: 正常人都想优先加黑边或者是白边,我也是这么想的...你看先用白边搞一棵k条边的MST...然后维护比较黑边跟白边像堆一 ...
- [BZOJ2654]tree(二分+MST)
题目:http://www.lydsy.com:808/JudgeOnline/problem.php?id=2654 分析:此题很奇葩,我们可以给所有白边加上一个权值mid,那么在求得的MST中白边 ...
随机推荐
- Java中的字符串不变性
原文链接:http://www.programcreek.com/2009/02/diagram-to-show-java-strings-immutability/ (图片出处和内容参照) 1.声明 ...
- An operation on a socket could not be performed because the system lacked sufficient buffer space or because a queue was full.
与 SQL Server 建立连接时出现与网络相关的或特定于实例的错误.未找到或无法访问服务器.请验证实例名称是否正确并且 SQL Server 已配置为允许远程连接. (provider: TCP ...
- 关于\r和\n的区别
回车和换行来源 在计算机还没有出现之前,有一种叫做电传打字机(Teletype Model 33)的玩意,每秒钟可以打10个字符.但是它有一个问题,就是打完一行换行的时候,要用去0.2秒,正好可以打两 ...
- C# 事件浅析
前言 对于搞.net的朋友来说,经常会遇到关于事件和委托的问题:事件与委托有什么关系?事件的本质是什么?委托的本质又是什么?由于.net 做了大量的封装,对于初学者,这两个概念确实不怎么好理解.事件是 ...
- NGUI如何使用汉字
1:准备好字体文件,就是ttf后缀名的那些.. 2:在第一个红线部分,将下拉框选择为Unity,在后面的字体里面选择第一步准备好的字体. 3:创建UILabel,widget里面的Color才是字体的 ...
- Google ProtocolBuffer
https://www.ibm.com/developerworks/cn/linux/l-cn-gpb/index.html 1. Protocol Buffers 简介 Protocol Buff ...
- Entity FrameWork 配置 之连接字符串隐藏或重用
C/S项目中使用EF,默认回生成app.config文件夹,软件打包安装成功之后就回生成一个对应exe.config.里面会包含配置的一些信息. 这里介绍给大家一种隐藏连接字符串的方式. 代码如下: ...
- 双camera景深计算 (1)
http://www.52rd.com/S_TXT/2016_6/TXT85047.HTM?WebShieldDRSessionVerify=Wz3h6srvu76qRI4MFxK8 前面介绍了双ca ...
- shell脚本 入门 —— 符号篇
shell Shell就是一个命令行解释器,它的作用是解释执行用户的命令,用户输入一条命令,Shell就解释执行一条,这种方式称为交互式(Interactive). Shell还有一种执行命令的方式称 ...
- react 关于this.setState使用时,第一次无法获取数据,第二次获取的数据是第一次触发的疑问
我使用的是antd组件, compareClickFn(orderCodes, fileNames) { printLog("orderCodes----------"+ orde ...