2021.07.19 BZOJ2654 tree(生成树)

tree - 黑暗爆炸 2654 - Virtual Judge (vjudge.net)

重点:

1.生成树的本质

2.二分

题意:

有一张无相带权连通图,每一条边都是黑色或者白色,求一棵恰好有need条白色边的最小生成树。

分析:

我们可以把每一条边按照一定优先级进行排序,当然,手动优先级(手动狗头),对于同一个权值的边,我们规定白色边比黑色边优先级高。但是对于权值特别小的的黑色边,在构成一棵生成树时,搞不好所有边都是由黑色边构成的,怎么办呢?当然还是手动给白色边改变优先级啊,把白色边供到太上皇的位置,他不想优先出现都难。白色边的颜色肯定不能改变,只能改变它的权值,白色边整体大平移活动正式开始!至于白色边到底要减多少合适,交给二分,朕相信它~

代码如下:

#include<cstdio>
#include<iostream>
#include<algorithm>
#include<cstring>
using namespace std;
const int N=5e5+10;
int n,m,need,cnt,fa[N],vis[N*2];
struct node{
int col,from,to,val;
bool operator <(const node &b)const{
return val==b.val?col<b.col:val<b.val;
}
}a[N*2];
inline int read(){
int s=0,w=1;
char ch=getchar();
while(ch<'0'||ch>'9'){
if(ch=='-')w=-1;
ch=getchar();
}
while(ch<='9'&&ch>='0'){
s=s*10+ch-'0';
ch=getchar();
}
return s*w;
}
int find(int x){
return fa[x]==x?x:fa[x]=find(fa[x]);
}
int kruskal(){
int sum=0;
memset(vis,0,sizeof(vis));
for(int i=1;i<=n;i++)fa[i]=i;
sort(a+1,a+m+1);
for(int i=1;i<=m;i++){
int ui=find(a[i].from),vi=find(a[i].to);
if(ui==vi)continue;
fa[ui]=vi;
sum+=a[i].val;
vis[i]=1;
}
return sum;
}
bool check(int len){
for(int i=1;i<=m;i++)if(!a[i].col)a[i].val-=len;
int tmp=kruskal(),sum=0;
for(int i=1;i<=m;i++)if(!a[i].col)
a[i].val+=len,sum+=vis[i];
return sum>=need;
}
int solve(){
int l=-200,r=200;
while(l<r){
int mid=(l+r)>>1;
if(check(mid))r=mid;
else l=mid+1;
}
return l;
}
int main(){
n=read();m=read();need=read();
for(int i=1;i<=m;i++){
a[i].from=read()+1;a[i].to=read()+1;
a[i].val=read();a[i].col=read();
}
int len=solve();
for(int i=1;i<=m;i++)if(!a[i].col)a[i].val-=len;
int ans=kruskal();
for(int i=1;i<=m;i++)if(!a[i].col)a[i].val+=len;
ans+=len*need;
cout<<ans;
return 0;
}

2021.07.19 BZOJ2654 tree(生成树)的更多相关文章

  1. 2021.07.19 P2294 狡猾的商人(差分约束)

    2021.07.19 P2294 狡猾的商人(差分约束) [P2294 HNOI2005]狡猾的商人 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) 重点: 1.差分约束最长路与最短 ...

  2. 2021.07.19 P2624 明明的烦恼(prufer序列,为什么杨辉三角我没搞出来?)

    2021.07.19 P2624 明明的烦恼(prufer序列,为什么杨辉三角我没搞出来?) [P2624 HNOI2008]明明的烦恼 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn ...

  3. 2021.12.19 eleveni的刷题记录

    2021.12.19 eleveni的刷题记录 0. 本次记录有意思的题 0.1 每个点恰好经过一次并且求最小时间 P2469 [SDOI2010]星际竞速 https://www.luogu.com ...

  4. 2021.07.09 K-D树

    2021.07.09 K-D树 前置知识 1.二叉搜索树 2.总是很长的替罪羊树 K-D树 建树 K-D树具有二叉搜索树的形态,对于每一个分类标准,小于标准的节点在父节点左边,大于标准的节点在父节点右 ...

  5. AI Summit(2018.07.19)

    AI Summit 时间:2018.07.19地点:北京丽都皇冠假日酒店

  6. 日常Javaweb 2021/11/19

    Javaweb Dao层: //连接数据库,实现增查功能 package dao; import java.sql.Connection; import java.sql.DriverManager; ...

  7. 2021.07.17 题解 CF1385E Directing Edges(拓扑排序)

    2021.07.17 题解 CF1385E Directing Edges(拓扑排序) CF1385E Directing Edges - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) ...

  8. 2021.07.02 P1383 高级打字机题解(可持久化平衡树)

    2021.07.02 P1383 高级打字机题解(可持久化平衡树) 分析: 从可以不断撤销并且查询不算撤销这一骚操作可以肯定这是要咱建一棵可持久化的树(我也只会建可持久化的树,当然,还有可持久化并查集 ...

  9. 2021.07.02 UVa1197 多路归并模板

    2021.07.02 UVa1197 多路归并模板 UVA11997 K Smallest Sums - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) 分析: 题解 UVA11997 ...

随机推荐

  1. 【论文阅读】CVPR2022: Learning from all vehicles

    Column: March 23, 2022 1:08 PM Last edited time: March 23, 2022 11:13 PM Sensor/组织: 现leaderboard第一名, ...

  2. Session Cookie Token Json-Web-Token

    什么是认证(Authentication) 通俗地讲就是验证当前用户的身份,证明"你是你自己"(比如:你每天上下班打卡,都需要通过指纹打卡,当你的指纹和系统里录入的指纹相匹配时,就 ...

  3. RocketMq基础 看这一篇就够了

    RocketMQ 编译安装 HelloWorld 官方网站 http://rocketmq.apache.org GitHub https://github.com/apache/rocketmq Q ...

  4. 开源三轴云台EVVGC(simple BGC)分析

    一. 主程序分析 主程序结构清晰,流程如图所示,下面将对每个部分做详细分析 二. 系统初始化 系统初始化部分的流程如上图所示,下面对每部分做具体分析 1. 时钟初始化 该部分主要是使能DWT,用DWT ...

  5. List 和 Map 区别?

    表面来看,List是一个只是存放单个元素的集合,List集合所包含的元素可以重复,元素按放入的先后顺序来存放,程序可以通过元素的索引来读取元素,因此List相当于一个动态数组:Map则是一个存放key ...

  6. myisamchk 是用来做什么的?

    它用来压缩 MyISAM 表,这减少了磁盘或内存使用. MyISAM Static 和 MyISAM Dynamic 有什么区别? 在 MyISAM Static 上的所有字段有固定宽度.动态 MyI ...

  7. 当一个线程进入一个对象的 synchronized 方法 A 之后, 其它线程是否可进入此对象的 synchronized 方法 B?

    不能.其它线程只能访问该对象的非同步方法,同步方法则不能进入.因为非静 态方法上的 synchronized 修饰符要求执行方法时要获得对象的锁,如果已经进入 A 方法说明对象锁已经被取走,那么试图进 ...

  8. Redis 支持的 Java 客户端都有哪些?官方推荐用哪个?

    Redisson.Jedis.lettuce 等等,官方推荐使用 Redisson.

  9. Java 中,嵌套公共静态类与顶级类有什么不同?

    类的内部可以有多个嵌套公共静态类,但是一个 Java 源文件只能有一个顶级公 共类,并且顶级公共类的名称与源文件名称必须一致.

  10. mysql常见命令参数(一)

    1.mysql命令常用参数 1.--auto-rehash (tab键自动补全,表名及表字段) # mysql -u root --auto-rehash # vim my.cnf [mysql] a ...