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分别表示点数,边数和需要的白色 ...
随机推荐
- C# 写 LeetCode easy #9 Palindrome Number
9.Palindrome Number Determine whether an integer is a palindrome. An integer is a palindrome when it ...
- JAVA企业级开发-jdbc入门(09)
一. jdbc介绍 JDBC全称为:Java DataBase Connectivity(java数据库连接). SUN公司为了简化.统一对数据库的操作,定义了一套Java操作数据库的规范,称之为JD ...
- OVS编译
下载源码 # git clone https://github.com/openvswitch/ovs.git # cd ovs # git checkout branch-2.8 下载依赖包 # y ...
- 机器学习中的L1、L2正则化
目录 1. 什么是正则化?正则化有什么作用? 1.1 什么是正则化? 1.2 正则化有什么作用? 2. L1,L2正则化? 2.1 L1.L2范数 2.2 监督学习中的L1.L2正则化 3. L1.L ...
- 前端三部曲之Html -- 1(html的基本结构和常见的meta标签的作用)
一个H5页面的基本结构是什么 我么在编辑器中输入html:5可以得到 <!DOCTYPE html> <!-- 声明文档类型 --> <html lang="e ...
- PJzhang:谷歌在中国大陆可以使用的部分服务
猫宁!!! 参考链接:https://lusongsong.com/reed/170.html https://www.williamlong.info/archives/2124.html http ...
- Jar命令用法
JAR文件 JAR文件 全称:Java Archive File , 意思是Java档案文件.通常JAR文件是一种压缩文件,与常见的ZIP压缩文件兼容,通常被称为JAR包. JAR文件和ZIP文件的区 ...
- [题解](gcd/欧拉函数)luogu_P2568_GCD
求gcd(x,y)=p等价于求gcd(x/p,y/p)=1,转化为了n/p内互质的个数 所以欧拉函数,因为有序所以乘2,再特判一下只有在1,1情况下才会重复计算,所以每次都减一 数组开小一时爽,提交w ...
- 简单记录下HTTPS中的SSL
大概思路 大概思路是混合加密的方式,即对称加密方式混合非对称加密方式. 非对称加密会更加安全,功能也更强大,但他复杂而且速度慢. 对称加密速度快,但要保证这个公共密钥的正确性和真实性. 所以两者结合, ...
- 053 Maximum Subarray 最大子序和
给定一个序列(至少含有 1 个数),从该序列中寻找一个连续的子序列,使得子序列的和最大.例如,给定序列 [-2,1,-3,4,-1,2,1,-5,4],连续子序列 [4,-1,2,1] 的和最大,为 ...