BZOJ 2654: tree Kruskal+二分答案
2654: tree
Time Limit: 30 Sec Memory Limit: 512 MB
Submit: 1863 Solved: 736
[Submit][Status][Discuss]
Description
Input
Output
Sample Input
0 1 1 1
0 1 2 0
Sample Output
HINT
原数据出错,现已更新 by liutian,但未重测---2016.6.24
Source
想法:给全部白边加上同一个数,可以让白边在Kruskal中的加入顺序平移一下,那么白边数量也随之改变。
边权比较小,可以暴力枚举这个数O(200*m).发现这个数越大,白边数越少,于是二分优化。O(m*log200)
#include<cstdio>
#include<algorithm>
const int len(),lem(),INF(0x7fffffff);
int V,E,need,a,b,c,col,f[len+],limt,total,bf,ans,sum,last;
struct Node{int a,b,c;}white[lem+],black[lem+];int Wt,Bt;
bool cmp(Node A,Node B){return A.c<B.c;}
template <class T>void read(T &x)
{
x=;char ch=getchar();int f=;
while(ch<''||ch>''){f=(ch=='-');ch=getchar();}
while(ch>=''&&ch<=''){x=x*+ch-'';ch=getchar();}
x=f?-x:x;
}
int gf(int x){return x==f[x]?x:f[x]=gf(f[x]);}
bool union_fa(int x,int y)
{
x=gf(x),y=gf(y); f[x]=y; return (x!=y);
}
void Kruskal()
{
total=sum=; int Wl=,Bl=;
for(int i=;i<=V;i++)f[i]=i;
while(Wl<=Wt || Bl<=Bt)
{
if(Wl<=Wt && (white[Wl].c+limt<=black[Bl].c || Bl>Bt))
{
if(union_fa(white[Wl].a,white[Wl].b))total++,sum+=white[Wl].c;
Wl++;
}else
{
if(union_fa(black[Bl].a,black[Bl].b))sum+=black[Bl].c;
Bl++;
}
}
}
int main()
{
// freopen("C.in","r",stdin);
// freopen("C.out","w",stdout);
read(V),read(E),read(need);
for(int i=;i<=E;i++)
{
read(a),read(b),read(c),read(col);a++,b++;
if(col)black[++Bt]=(Node){a,b,c};
else white[++Wt]=(Node){a,b,c};
}
std::sort(white+,white++Wt,cmp);
std::sort(black+,black++Bt,cmp);
limt=;
for(int l=-,r=;l<=r;)
{
limt=(l+r)/; Kruskal();
if(total>=need)ans=sum,l=limt+;else r=limt-;
}
printf("%d",ans);
return ;
}
BZOJ 2654: tree Kruskal+二分答案的更多相关文章
- BZOJ 2654 tree(二分答案+并查集)
[题目链接] http://www.lydsy.com/JudgeOnline/problem.php?id=2654 [题目大意] 给你一个无向带权连通图,每条边是黑色或白色. 让你求一棵最小权的恰 ...
- [BZOJ2654] tree (kruskal & 二分答案)
Description 给你一个无向带权连通图,每条边是黑色或白色.让你求一棵最小权的恰好有need条白色边的生成树. 题目保证有解. Input 第一行V,E,need分别表示点数,边数和需要的白色 ...
- BZOJ 2654: tree( 二分 + MST )
我们给白色的边增加权值 , 则选到的白色边就会变多 , 因此可以二分一下. 不过这道题有点小坑... ------------------------------------------------- ...
- BZOJ 2525 Poi2011 Dynamite 二分答案+树形贪心
题目大意:给定一棵树,有一些点是关键点,要求选择不超过mm个点.使得全部关键点到近期的选择的点距离最大值最小 二分答案,问题转化为: 给定一棵树,有一些点是关键点,要求选择最少的点使得每一个关键点到选 ...
- BZOJ 1816: [Cqoi2010]扑克牌( 二分答案 )
二分答案.. 一开始二分的初始右边界太小了然后WA,最后一气之下把它改成了INF... -------------------------------------------------------- ...
- BZOJ 2792 Poi2012 Well 二分答案
题目大意:给定一个非负整数序列A.每次操作能够选择一个数然后减掉1,要求进行不超过m次操作使得存在一个Ak=0且max{Ai−Ai+1}最小,输出这个最小值以及此时最小的k 二分答案,然后验证的时候首 ...
- bzoj 2654 tree 二分+kruskal
tree Time Limit: 30 Sec Memory Limit: 512 MBSubmit: 2739 Solved: 1126[Submit][Status][Discuss] Des ...
- BZOJ 2654: tree(二分 最小生成树)
Time Limit: 30 Sec Memory Limit: 512 MBSubmit: 2901 Solved: 1196[Submit][Status][Discuss] Descript ...
- [BZOJ 2654]tree(陈立杰)
Description 给你一个无向带权连通图,每条边是黑色或白色.让你求一棵最小权的恰好有need条白色边的生成树. 题目保证有解. Input 第一行V,E,need分别表示点数,边数和需要的白色 ...
随机推荐
- day1 java基础回顾- 文件路径
绝对路径 以根目录或某盘符开头的路径(或者说完整的路径) 例如: l c:/a.txt (Windows操作系统中) l c:/xxx/a.txt (Windows操作系统中) l /var/x ...
- 图解SynchronousQueue原理详解-非公平模式
SynchronousQueue原理详解-非公平模式 开篇 说明:本文分析采用的是jdk1.8 约定:下面内容中Ref-xxx代表的是引用地址,引用对应的节点 前面已经讲解了公平模式的内容,今天来讲解 ...
- 无监督学习:Deep Generative Mode(深度生成模型)
一 前言 1.1 Creation 据说在费曼死后,人们在他生前的黑板上拍到如图画片,在左上角有道:What i cannot create ,I do not understand. Generat ...
- time元素 pubdate属性
time元素和pubdate属性 https://blog.csdn.net/ziy10231207/article/details/51883397
- C++ STL vector使用总结
vector是C++标准模板库中的部分内容,它是一个多功能的,能够操作多种数据结构和算法的模板类和函数库.vector之所以被认为是一个容器,是因为它能够像容器一样存放各种类型的对象,简单地说vect ...
- shader Category
Category:是渲染命令的逻辑组,着色器可以多个子着色器,他们需要共同的效果 // Copyright 2014 Google Inc. All rights reserved. // // Li ...
- java之代理 静态代理和动态代理
一.静态代理 1. 代理有很多种,有虚拟代理,保护代理,智能引用代理,和远程代理; 开发中最常用的是只能引用代理 2. 代理的模式有两种,分别是: 静态代理 代理对象,被代理对象在 ...
- 制作windows启动盘
·首先:不要使用“老毛桃,大白菜,u深度,电脑店,u大师”等工具,国产流氓软件了解下. ·工具:UltraISO (自行下载)环境:Windows ·Windows 7微软原版无修改的系统镜像下载地址 ...
- IOS 打包提示 No iTunes Connect access for the team
1.可以在提示页直接点击 Manage Accounts按钮,进去页面后,选择开发者账号点减号删除:(或者在Xcode中直接按command+键进入,选择accounts,选中账号按-键删除) 2.完 ...
- ES6新特性使用小结(四)
十一.Proxy .Reflect ①.Proxy 的概念和常用方法 { let obj = { //1.定义原始数据对象 对用户不可见 time: '2017-09-20', name: 'net' ...