题解:

老早看的并没有写

wqs二分的原理和这个凸函数的性质已经证明过了

写的时候

主要的问题在于每次的答案是一个范围

什么意思呢

其实比较简单的做法是

优先取白边,优先取黑边做两次

然后看一下要求的在不在中间就可以了

但是这样有两倍的常数

所以我们换个处理的方法

就是我们优先处理黑边

然后只有答案<=要求的时候更新答案

由于一定有解,所以最后一次更新一定满足要求

代码:

#include <bits/stdc++.h>
using namespace std;
#define IL inline
#define rint register int
#define rep(i,h,t) for (int i=h;i<=t;i++)
#define dep(i,t,h) for(int i=t;i>=h;i--)
char ss[<<],*A=ss,*B=ss;
IL char gc()
{
return A==B&&(B=(A=ss)+fread(ss,,<<,stdin),A==B)?EOF:*A++;
}
template<class T>void read(T &x)
{
rint f=,c; while (c=gc(),c<||c>) if (c=='-') f=-; x=c^;
while (c=gc(),<c&&c<) x=(x<<)+(x<<)+(c^); x*=f;
}
const int N=2e5;
struct re{
int a,b,c,d;
}a[N],b[N];
int n,m,k,fa[N],ans;
bool cmp(re x,re y)
{
return(x.c<y.c||((x.c==y.c)&&(x.d>y.d)));
}
int find(int x)
{
return x==fa[x]?x:fa[x]=find(fa[x]);
}
int check(int x)
{
rep(i,,m)
{
if (!a[i].d) b[i].c=a[i].c+x;
else b[i].c=a[i].c;
b[i].a=a[i].a;
b[i].b=a[i].b;
b[i].d=a[i].d;
}
sort(b+,b+m+,cmp);
ans=;
rep(i,,n) fa[i]=i;
int cnt=,cnt2=;
rep(i,,m)
{
int x1=find(b[i].a),x2=find(b[i].b);
if (x1!=x2)
{
if (!b[i].d) cnt2++;
ans+=b[i].c;
fa[x1]=x2;
}
}
return(cnt2);
}
int main()
{
freopen("5.in","r",stdin);
freopen("5.out","w",stdout);
ios::sync_with_stdio(false);
cin>>n>>m>>k;
for(int i=;i<=m;i++)
{
cin>>a[i].a>>a[i].b>>a[i].c>>a[i].d;
a[i].a++; a[i].b++;
}
int h=-,t=;
int ans2=1e8;
while (h<=t)
{
int mid=(h+t)/;
int xx=check(mid);
if (xx>k) h=mid+;
else t=mid-,ans2=ans-mid*k;
}
printf("%d",ans2);
return ;
}

bzoj2654的更多相关文章

  1. 【bzoj2654】 tree

    http://www.lydsy.com/JudgeOnline/problem.php?id=2654 (题目链接) 题意 给你一个无向带权连通图,每条边是黑色或白色.让你求一棵最小权的恰好有nee ...

  2. 【BZOJ2654】Tree(凸优化,最小生成树)

    [BZOJ2654]Tree(凸优化,最小生成树) 题面 BZOJ 洛谷 题解 这道题目是之前\(Apio\)的时候写的,忽然发现自己忘记发博客了... 这个万一就是一个凸优化, 给所有白边二分一个额 ...

  3. 【BZOJ2654】tree 二分+最小生成树

    [BZOJ2654]tree Description 给你一个无向带权连通图,每条边是黑色或白色.让你求一棵最小权的恰好有need条白色边的生成树. 题目保证有解. Input 第一行V,E,need ...

  4. [bzoj2654]tree_二分_kruskal

    tree bzoj-2654 题目大意:给你一个无向带权连通图,每条边是黑色或白色.让你求一棵最小权的恰好有need条白色边的生成树.题目保证有解. 注释:$1\le V\le 5\cdot 10^4 ...

  5. 「BZOJ2654」tree

    「BZOJ2654」tree 最小生成树+二分答案. 最开始并没有觉得可以二分答案,因为答案并不单调啊. 其实根据题意,白边的数目肯定大于need条,而最小生成树的白边数并不等于need(废话),可以 ...

  6. 2021.07.19 BZOJ2654 tree(生成树)

    2021.07.19 BZOJ2654 tree(生成树) tree - 黑暗爆炸 2654 - Virtual Judge (vjudge.net) 重点: 1.生成树的本质 2.二分 题意: 有一 ...

  7. [BZOJ2654]tree(二分+MST)

    题目:http://www.lydsy.com:808/JudgeOnline/problem.php?id=2654 分析:此题很奇葩,我们可以给所有白边加上一个权值mid,那么在求得的MST中白边 ...

  8. BZOJ2654 tree

    Description 给你一个无向带权连通图,每条边是黑色或白色.让你求一棵最小权的恰好有need条白色边的生成树. 题目保证有解. Input 第一行V,E,need分别表示点数,边数和需要的白色 ...

  9. [BZOJ2654] tree (kruskal & 二分答案)

    Description 给你一个无向带权连通图,每条边是黑色或白色.让你求一棵最小权的恰好有need条白色边的生成树. 题目保证有解. Input 第一行V,E,need分别表示点数,边数和需要的白色 ...

随机推荐

  1. 机器学习课程-第8周-降维(Dimensionality Reduction)—主成分分析(PCA)

    1. 动机一:数据压缩 第二种类型的 无监督学习问题,称为 降维.有几个不同的的原因使你可能想要做降维.一是数据压缩,数据压缩不仅允许我们压缩数据,因而使用较少的计算机内存或磁盘空间,但它也让我们加快 ...

  2. Python学习笔记10--unittest参数化

    我们在写case的时候,如果用例的操作是一样的,就是参数不同,比如说要测一个登陆的接口,要测正常登陆的.黑名单用户登陆的.账号密码错误的等等,在unittest里面就要写多个case来测试. 这样的情 ...

  3. div锚点链接跳转

    a标签href可跳转到知道dom节点(通过id) 代码 <!DOCTYPE html> <html> <head> <meta name="view ...

  4. 出栈顺序 与 卡特兰数(Catalan)的关系

    一,问题描述 给定一个以字符串形式表示的入栈序列,请求出一共有多少种可能的出栈顺序?如何输出所有可能的出栈序列? 比如入栈序列为:1 2 3  ,则出栈序列一共有五种,分别如下:1 2 3.1 3 2 ...

  5. TCP/IP详解 卷1 第十七章 TCP:传输控制协议

    17.2 TCP的服务 TCP提供了一种面向连接的.可靠的字节流服务.两个使用TCP的应用在彼此交换数据之前必须先建立一个TCP连接. TCP通过下列方式来提供可靠性: 1)  应用数据被分割成TCP ...

  6. ssh 登录出现Are you sure you want to continue connecting (yes/no)?解决方法

    ssh 登录出现Are you sure you want to continue connecting (yes/no)?解决方法 1,可以使用ssh -o 的参数进行设置例如: ssh -o St ...

  7. C# ffmpeg工具将视频转为SWF格式

    1.下载ffmpeg工具 using System; using System.Collections; using System.Configuration; using System.Data; ...

  8. JavaScript学习 - 基础(二) - 基础类型/类型转换

    基础类型 - 数字类型(Number) 1.最基本的数据类型 2.不区分整型数值和浮点型数值 3.所有数字采用64位浮点格式存储,相当于Java和C语言中double格式 4.能表示的最大值 +- 1 ...

  9. python3爬虫二

    1.获取列表页文章url集合: scrapy shell http://blog.jobbole.com/all-posts/ response.css('div.post-meta a.archiv ...

  10. V4L2应用程序框架【转】

    转自:https://www.cnblogs.com/hzhida/archive/2012/05/29/2524397.html V4L2是V4L的升级版本,linux下视频设备程序提供了一套接口规 ...