p2619 [国家集训队2]Tree I [wqs二分学习]
分析
https://www.cnblogs.com/CreeperLKF/p/9045491.html
反正这个博客看起来很nb就对了
但是不知道他在说啥
实际上wqs二分就是原来的值dp[x]表示选x个的最优解满足是一个凸包
然后就可以二分一个数
让有限制的一类数全部给权值加上这个二分的数
然后判断即可
这个题就是典型的模板题
代码
#include<bits/stdc++.h>
using namespace std;
const int inf = 1e9+;
int n,m,sum,res,cnt,tot,fa[];
struct node {
int x,y,z,col;
};
node d[],d1[];
inline int sf(int x){return fa[x]==x?x:fa[x]=sf(fa[x]);}
inline bool cmp(const node x,const node y){return x.z==y.z?x.col<y.col:x.z<y.z;}
inline int ck(int mid){
int i,j,k;
for(i=;i<=m;i++)d[i]=d1[i];
for(i=;i<=m;i++)if(!d[i].col)d[i].z+=mid;
res=tot=cnt=;
for(i=;i<=n;i++)fa[i]=i;
sort(d+,d+m+,cmp);
for(i=;i<=m;i++){
int x=d[i].x,y=d[i].y;
if(sf(x)!=sf(y)){
fa[sf(x)]=sf(y);
cnt++;
res+=d[i].z;
if(!d[i].col)tot++;
}
if(cnt==n-)break;
}
return tot;
}
int main(){
int i,j,k,le=-,ri=;
scanf("%d%d%d",&n,&m,&sum);
for(i=;i<=m;i++)scanf("%d%d%d%d",&d1[i].x,&d1[i].y,&d1[i].z,&d1[i].col),d1[i].x++,d1[i].y++;
while(ri-le>){
int mid=(le+ri)>>;
if(ck(mid)>=sum)le=mid;
else ri=mid;
}
ck(le);
printf("%d\n",res-sum*le);
return ;
}
p2619 [国家集训队2]Tree I [wqs二分学习]的更多相关文章
- Luogu P2619 [国家集训队2]Tree I(WQS二分+最小生成树)
P2619 [国家集训队2]Tree I 题意 题目描述 给你一个无向带权连通图,每条边是黑色或白色.让你求一棵最小权的恰好有\(need\)条白色边的生成树. 题目保证有解. 输入输出格式 输入格式 ...
- P2619 [国家集训队2]Tree I(最小生成树+二分)
P2619 [国家集训队2]Tree I 每次二分一个$x$,每条白边加上$x$,跑最小生成树 统计一下满足条件的最小值就好了. to me:注意二分不要写挂 #include<iostream ...
- luogu P2619 [国家集训队2]Tree I
题目链接 luogu P2619 [国家集训队2]Tree I 题解 普通思路就不说了二分增量,生成树check 说一下坑点 二分时,若黑白边权有相同,因为权值相同优先选白边,若在最有增量时出现黑白等 ...
- 洛谷P2619 [国家集训队2]Tree I(带权二分,Kruscal,归并排序)
洛谷题目传送门 给一个比较有逼格的名词--WQS二分/带权二分/DP凸优化(当然这题不是DP). 用来解决一种特定类型的问题: 有\(n\)个物品,选择每一个都会有相应的权值,需要求出强制选\(nee ...
- Luogu P2619 [国家集训队2]Tree I 凸优化,wqs二分
新学的科技.设\(f(x)\)为选\(x\)条白色边的时候的最小生成树权值和,那么可以猜到它应该是一个下凸函数的形式. 如图,图中\(x\)坐标表示选的白色边条数,\(y\)坐标表示获得的权值,那么我 ...
- P2619 [国家集训队2]Tree I
Description 给你一个无向带权连通图,每条边是黑色或白色.让你求一棵最小权的恰好有need条白色边的生成树. 题目保证有解. Input 第一行V,E,need分别表示点数,边数和需要的白色 ...
- [国家集训队2012]tree(陈立杰)
[国家集训队2012]tree(陈立杰) 题目 给你一个无向带权连通图,每条边是黑色或白色.让你求一棵最小权的恰好有need条白色边的生成树.题目保证有解. INPUT 第一行V,E,need分别表示 ...
- [总结] wqs二分学习笔记
论文 提出问题 在某些题目中,强制规定只能选 \(k\) 个物品,选多少个和怎么选都会影响收益,问最优答案. 算法思想 对于上述描述的题目,大部分都可以通过枚举选择物品的个数做到 \(O(nk^2)\ ...
- wqs二分 学习笔记
wqs二分学习笔记 wqs二分适用题目及理论分析 wqs二分可以用来解决这类题目: 给你一个强制要求,例如必须\(n\)条白边,或者划分成\(n\)段之类的,然后让你求出最大(小)值.但是需要满足图像 ...
随机推荐
- Django使用Celery进行异步任务
Celery Celery是一个功能完备即插即用的异步任务队列系统.它适用于异步处理问题,当发送邮件.或者文件上传, 图像处理等等一些比较耗时的操作,我们可将其异步执行,这样用户不需要等待很久,提高用 ...
- P-残缺的棋盘
Input 输入包含不超过10000 组数据.每组数据包含6个整数r1, c1, r2, c2, r3, c3 (1<=r1, c1, r2, c2, r3, c3<=8). 三个格子A, ...
- js倒计时跳转jquery插件版
<script type="text/javascript" src="js/jquery1.91.min.js"></script> ...
- 使用ajax发送文件的三种方式及预览图片的方法,上传按钮美化
后端代码 def upload(request): if request.method == "GET": return render(request,'upload.html') ...
- kafka复习(2)
一.简介 --------------------------------------- 1.kafka是一个分布式的.可分区的.可复制的消息系统.它提供了消息系统的功能,但是有自己独特的设计. 2. ...
- Trait讲解
<?php /** * Trait解决PHP单继承的一种方法,使开发人员在不同层次结构的类中复用属性和方法 * Trait无法实例化 * Trait不是类,不能被继承,所以不能再Trait中不能 ...
- 03python面向对象编程3
案例学习 # notebook.pyimport datetime # Store the next available id for all new notes last_id = 0 class ...
- mobilenetV3
1.MobilenetV3是通过NAS得到的,结合了v1,v2和MnasNet的结构,包括v1的dw,v2的linear bottleneck和逆残差结构, MnasNet的se结构(接在部分line ...
- Centos修改默认运行级别
一.centos默认运行级别 下面是linux的默认运行级别.vim /etc/inittab即可查看. # Default runlevel. The runlevels used are: # - ...
- css3-文字与字体
1. 给文字添加阴影---text-shadow 语法: text-shadow: X-Offset Y-Offset blur color; X-Offset:表示阴影的水平偏移距离,其值为正值时阴 ...