原题链接:https://www.luogu.org/problemnew/show/P2619

Tree I

题目描述

给你一个无向带权连通图,每条边是黑色或白色。让你求一棵最小权的恰好有need条白色边的生成树。

题目保证有解。

输入输出格式
输入格式:

第一行V,E,need分别表示点数,边数和需要的白色边数。

接下来E行

每行s,t,c,col表示这边的端点(点从0开始标号),边权,颜色(0白色1黑色)。

输出格式:

一行表示所求生成树的边权和。

输入输出样例
输入样例#1:

2 2 1
0 1 1 1
0 1 2 0

输出样例#1:

2

说明

0:V<=10

1,2,3:V<=15

0,…,19:V<=50000,E<=100000

所有数据边权为[1,100]中的正整数。

By WJMZBMR

题解

带权二分第一题。。。

如果白色边的权值都加上+∞+\infty+∞,最小生成树中的白色边会尽量少;如果白色边权值都加上−∞-\infty−∞,最小生成树中的白色边就会尽量多。

所以我们二分白色边的附加权值,每次做KruscalKruscalKruscal,看白边有几条,最后输出答案即可。

代码
#include<bits/stdc++.h>
#define inf 100
using namespace std;
const int M=1e5+5;
struct sd{int a,b,val,col;}ed[M],now[M];
bool operator<(sd a,sd b){return a.val==b.val?a.col<b.col:a.val<b.val;}
int f[M],n,m,need,cot,tot,ans;
int root(int v){return f[v]==v?v:f[v]=root(f[v]);}
bool check(int d)
{ans=cot=tot=0;for(int i=1;i<=n;++i)f[i]=i;for(int i=1;i<=m;++i)now[i]=ed[i],now[i].val+=(ed[i].col?0:d);sort(now+1,now+1+m);for(int i=1;i<=m&&tot<n;++i)if(root(now[i].a)!=root(now[i].b))f[f[now[i].a]]=f[now[i].b],cot+=(now[i].col^1),ans+=now[i].val,++tot;return cot>=need;
}
void in()
{scanf("%d%d%d",&n,&m,&need);for(int i=1,a,b,c,d;i<=m;++i)scanf("%d%d%d%d",&a,&b,&c,&d),ed[i]=(sd){a+1,b+1,c,d};
}
void ac()
{int l=-inf,r=inf,mid,d;for(;l<=r;mid=l+r>>1,check(mid)?(l=mid+1,d=mid):r=mid-1);check(d);printf("%d",ans-need*d);
}
int main(){in(),ac();}

Luogu2619[国家集训队2] Tree I相关推荐

  1. Luogu P2619 [国家集训队2]Tree I(WQS二分+最小生成树)

    P2619 [国家集训队2]Tree I 题意 题目描述 给你一个无向带权连通图,每条边是黑色或白色.让你求一棵最小权的恰好有\(need\)条白色边的生成树. 题目保证有解. 输入输出格式 输入格式 ...

  2. P2619 [国家集训队2]Tree I

    P2619 [国家集训队2]Tree I 链接 分析: 为了确定白边选入的数量,所以给白边加一个权值,二分这个值,然后最小生成树.可以发现白边的数量虽这个值的增大而减小,满足单调性. 有一个问题:如果 ...

  3. [国家集训队2012]tree(陈立杰)

    1764. [国家集训队2012]tree(陈立杰) ★★★   输入文件: nt2012_tree.in   输出文件: nt2012_tree.out    简单对比 时间限制:3 s   内存限 ...

  4. Luogu P2619 [国家集训队2]Tree I 凸优化,wqs二分

    新学的科技.设\(f(x)\)为选\(x\)条白色边的时候的最小生成树权值和,那么可以猜到它应该是一个下凸函数的形式. 如图,图中\(x\)坐标表示选的白色边条数,\(y\)坐标表示获得的权值,那么我 ...

  5. cogs1799 [国家集训队2012]tree(伍一鸣)

    LCT裸题 注意打标记之间的影响就是了 这个膜数不会爆unsigned int #include<cstdio> #include<cstdlib> #include<a ...

  6. 数据结构(动态树):[国家集训队2012]tree(伍一鸣)

    [问题描述] 一棵n个点的树,每个点的初始权值为1.对于这棵树有q个操作,每个操作为以下四种操作之一: + u v c:将u到v的路径上的点的权值都加上自然数c: - u1 v1 u2 v2:将树中原 ...

  7. 洛谷P2619 [国家集训队2]Tree I(带权二分,Kruscal,归并排序)

    洛谷题目传送门 给一个比较有逼格的名词--WQS二分/带权二分/DP凸优化(当然这题不是DP). 用来解决一种特定类型的问题: 有\(n\)个物品,选择每一个都会有相应的权值,需要求出强制选\(nee ...

  8. P2619 [国家集训队]Tree I(WQS二分/带权二分/最小生成树)

    P2619 [国家集训队]Tree I 给定一个n个点,m条边的无向图,每条边有一个颜色黑色或者白色,求解恰好有k条白色边的最小生成树. 那么看到恰好选择k个的最优性问题,我们可以利用WQS二分解决, ...

  9. 洛谷P2619 [国家集训队]Tree I 题解

    洛谷P2619 [国家集训队]Tree I 题解 题目链接:P2619 [国家集训队]Tree I 题意: 给你一个无向带权连通图,每条边是黑色或白色.让你求一棵最小权的恰好有 need\text{n ...

  10. tree(陈立杰)[国家集训队2012]

    时间限制:3.0s   内存限制:1.0GB [大意] 给你一个无向带权连通图,每条边是黑色或白色.让你求一棵最小权的恰好有need条白色边的生成树. 题目保证有解. [输入格式] 第一行V,E,ne ...

最新文章

  1. 2021年Q2母婴行业季度洞察报告
  2. 一篇文章看清楚JDK13的特性!
  3. ncurses鼠标事件:mousemask(),ALL_MOUSE_EVENTS,KEY_MOUSE,getmouse(),mouse_grafo(),wmouse_trafo()
  4. HDU 5763 Another Meaning KMP+DP
  5. “遗留代码是传奇!”
  6. .Net环境下有关打印页面设置、打印机设置、打印预览对
  7. 能上QQ但不能打开网页——解决办法
  8. 编制现金流量表3个步骤!
  9. CWE ID 470:Use of Externally-Controlled Input to Select Classes or Code (‘Unsafe Reflection‘)
  10. 原生 js html 开发成桌面应用 以及打包
  11. 桌面虚拟化传输协议之android spice及spice源码分析之server(1)
  12. 电站计算机培训计划,电站年度培训的工作总结范文
  13. 数据链路层的功能与设备
  14. 全屏功能-实现全屏-图标切换
  15. 从零搭建 SpringCloud 服务
  16. shell编程之sed
  17. js对象数组去除重复
  18. 泛微荣获统信创客北京·鲲鹏应用创新大赛2022北京区域三等奖
  19. 品味30句对爱情的经典认识
  20. 新手体验 kaggle上的电影评论情感分析

热门文章

  1. Java多线程讲解,超详细!可获取相关笔记
  2. Java集合笔记,实用!!
  3. 不写xml的MyBatis-Plus中关联属性的查询(1对1,1对n)
  4. java web相对路径_java(Web)中相对路径,绝对路径问题总结
  5. 从零开始学安全(七)●Linux基础命令学习笔记
  6. HTTP协议详解(经典)
  7. JS精粹知识点和我的解释
  8. spark sql 对接 HDFS
  9. [转]Understanding Integration Services Package Configurations
  10. linq to sql 语法 学习笔记(1)