Description

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

Input

  第一行V,E,need分别表示点数,边数和需要的白色边数。
  接下来E行
  每行s,t,c,col表示这边的端点(点从0开始标号),边权,颜色(0白色1黑色)。

Output

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

Sample Input

2 2 1
0 1 1 1
0 1 2 0

Sample Output

2

HINT

  数据规模和约定
  0:V<=10
  1,2,3:V<=15
  0,..,19:V<=50000,E<=100000
  所有数据边权为[1,100]中的正整数。

Source

Solution

  如果给所有白色边加上一个权值,所形成的最小生成树的白边数会随该权值的增大而减小,满足单调性,可以二分权值。

  排序有一个技巧:我们每次考虑最多可以使用多少条白边,所以排序时若权值相同,白边排前黑边排后。如果排序不管黑边白边,那么所求的白边数会小于期望的答案,可能会导致WA。

  当然黑边在前白边在后也行,题是死的人是活的。

 #include <bits/stdc++.h>
using namespace std;
struct edge
{
int u, v, w, col;
bool operator < (const edge &rhs) const
{
return w == rhs.w ? col < rhs.col : w < rhs.w;
}
}e[];
int n, m, fa[], ans; int getfa(int x)
{
return fa[x] = x == fa[x] ? x : getfa(fa[x]);
} int Kruskal(int x)
{
int ecnt = , wcnt = , u, v;
ans = ;
for(int i = ; i <= n; i++)
fa[i] = i;
for(int i = ; i <= m; i++)
if(!e[i].col) e[i].w += x;
sort(e + , e + m + );
for(int i = ; i <= m; i++)
{
u = getfa(e[i].u), v = getfa(e[i].v);
if(u != v)
{
fa[v] = u, ans += e[i].w;
if(!e[i].col) wcnt++;
if(++ecnt >= n) break;
}
}
for(int i = ; i <= m; i++)
if(!e[i].col) e[i].w -= x;
return wcnt;
} int main()
{
int k, l = -, r = , mid;
cin >> n >> m >> k;
for(int i = ; i <= m; i++)
cin >> e[i].u >> e[i].v >> e[i].w >> e[i].col;
for(int i = ; i <= m; i++)
e[i].u++, e[i].v++;
while(l < r - )
{
mid = (l + r) / ;
if(Kruskal(mid) < k) r = mid;
else l = mid;
}
Kruskal(l);
cout << ans - l * k << endl;
return ;
}

[BZOJ2654] tree (kruskal & 二分答案)的更多相关文章

  1. BZOJ 2654: tree Kruskal+二分答案

    2654: tree Time Limit: 30 Sec  Memory Limit: 512 MBSubmit: 1863  Solved: 736[Submit][Status][Discuss ...

  2. 洛谷P1991无线通讯网[kruskal | 二分答案 并查集]

    题目描述 国防部计划用无线网络连接若干个边防哨所.2 种不同的通讯技术用来搭建无线网络: 每个边防哨所都要配备无线电收发器:有一些哨所还可以增配卫星电话. 任意两个配备了一条卫星电话线路的哨所(两边都 ...

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

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

  4. BZOJ2654:tree(最小生成树,二分)

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

  5. BZOJ 2654 tree(二分答案+并查集)

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

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

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

  7. [BZOJ2654]:tree(Kruskal+WQS二分)

    题目传送门 题目描述 给你一个无向带权连通图,每条边是黑色或白色.让你求一棵最小权的恰好有need条白色边的生成树.题目保证有解. 输入格式 开始标号),边权,颜色(0白色1黑色). 输出格式 一行表 ...

  8. [bzoj2654] tree 最小生成树kruskal+二分

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

  9. 2021.07.19 BZOJ2654 tree(生成树)

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

随机推荐

  1. html拨打电话、发送短信、发送邮件的链接写法

    拨打电话 <a href="tel:88888888">呼叫</a> 发送短信 <a href="sms:88888888"> ...

  2. chrome浏览器下JavaScript实现clipboard时无法访问剪切板解决方案

    在用JavaScript实现某个简单的复制到剪切板功能的时候,会考虑一下浏览器兼容性,主要是重点在IE和FireFox,把这个两个浏览器搞定后,基本上其他浏览器也不用太操心了,Chrome也一样,没出 ...

  3. ERROR namenode.NameNode: Failed to start namenode. java.lang.IllegalArgument

    这个问题一般是配置文件配置没有配置好的原因

  4. WAMP环境搭建过程中遇到的种种问题

    1,可以选择已经打包好的继承安装包,通常包含apache,mysql,PHP,phpMyadmin.如appserv和wamp. 2,自己分别安装. 第一步:安装mysql,注意设置root对应的密码 ...

  5. REALTEK 刷机方法 法

    REALTEK 是通用板最多的IC 方案之一,什么常说的2025 2270 2023 2033 2525 2545 2660 2280 2662 2670 2672 2674  2661  2668 ...

  6. HDMI中的AVmute是什么功能

    1. HDMI AVMute是HDMI TMDS数据岛周期General Control Packet中的一个标示. 2. AVMute字面意思是Audio Video Mute声音图像消隐,简单来说 ...

  7. 第3章 PCI总线的数据交换

    PCI Agent设备之间,以及HOST处理器和PCI Agent设备之间可以使用存储器读写和I/O读写等总线事务进行数据传送.在大多数情况下,PCI桥不直接与PCI设备或者HOST主桥进行数据交换, ...

  8. dojo中引入FusionCharts柱状图报错

    1.今天,做项目的过程中,我发现Java后台查询的数据都是正确的,并且拼接成JSON格式也正确,但是传到JSP页面时,图无法显示出来还报错,后来经过检查发现是JavaScript和引入FusionCh ...

  9. freemarker自定义标签(三)-nested指令

    freemarker自定义标签 1.nested指令 是可选的,可以在<#macro>和</#macro>之间使用在任何位置和任意次数 2.示例说明 <#macro ta ...

  10. Java中的List转换成JSON报错(四)

    1.错误描述 Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/commons/colle ...