【BZOJ2654】Tree(凸优化,最小生成树)

题面

BZOJ

洛谷

题解

这道题目是之前\(Apio\)的时候写的,忽然发现自己忘记发博客了。。。

这个万一就是一个凸优化,

给所有白边二分一个额外权值,并且给边权加上这个权值。

然后跑最小生成树,将限制问题转换为判定问题即可。

#include<iostream>
#include<cstdio>
#include<cstdlib>
#include<cstring>
#include<cmath>
#include<algorithm>
#include<set>
#include<map>
#include<vector>
#include<queue>
using namespace std;
#define ll long long
#define RG register
#define MAX 111111
inline int read()
{
RG int x=0,t=1;RG char ch=getchar();
while((ch<'0'||ch>'9')&&ch!='-')ch=getchar();
if(ch=='-')t=-1,ch=getchar();
while(ch<='9'&&ch>='0')x=x*10+ch-48,ch=getchar();
return x*t;
}
int n,m,K;
struct Link{int u,v,w,col;}e[MAX];
bool cmp(Link a,Link b){if(a.w!=b.w)return a.w<b.w;else return a.col<b.col;}
int f[MAX];
int getf(int x){return x==f[x]?x:f[x]=getf(f[x]);}
int check(int mid,int opt)
{
for(int i=1;i<=m;++i)
if(!e[i].col)e[i].w-=mid;
sort(&e[1],&e[m+1],cmp);
for(int i=0;i<n;++i)f[i]=i;
int cnt=0,tot=0,sum=0;
for(int i=1;i<=m;++i)
{
int u=e[i].u,v=e[i].v;
if(getf(u)==getf(v))continue;
f[getf(u)]=getf(v);
++tot;sum+=e[i].w;
if(!e[i].col)++cnt;
//if(tot==n-1)break;
}
for(int i=1;i<=m;++i)
if(!e[i].col)e[i].w+=mid;
if(!opt)return cnt;
else return sum;
}
int main()
{
n=read();m=read();K=read();
for(int i=1;i<=m;++i)
e[i].u=read(),e[i].v=read(),e[i].w=read(),e[i].col=read();
int l=-101,r=101,ans=1e9;
while(l<=r)
{
int mid=(l+r)>>1;
int d=check(mid,0);
if(d>=K)r=mid-1,ans=mid;
else l=mid+1;
}
printf("%d\n",check(ans,1)+K*ans);
return 0;
}

最新文章

  1. CodeForces - 148D Bag of mice
  2. ajax通讯之格式详解
  3. 【转】解决编译安装NGINX时make报错
  4. unsatisfied类型的异常
  5. jQuery Mobile和PhoneGap混合开发
  6. 编写类String的构造函数、拷贝构造函数、析构函数和赋值函数
  7. 使用Xib添加自定义View
  8. UWP 手绘视频创作工具技术分享系列 - Ink &amp; Surface Dial
  9. Spring简单的REST例子
  10. Android如果有一个任意写入的漏洞,如何将写权限转成执行权限
  11. P2472 [SCOI2007]蜥蜴(网络流)
  12. js正则表达式讲的最好的
  13. setInterval()、clearInterval()、setTimeout()和clearTimeout() js计数器方法(还有第三个参数)
  14. SQL 登录名 用户 角色
  15. Android app启动activity并调用onCreate()方法时都默默地干了什么?
  16. MongoVUE破解
  17. Apache配置文件httpd.conf细说
  18. 表单提交的3种方式,http post的contentType
  19. MySQL之LIMIT用法
  20. OpenCV2马拉松第10圈——直方图反向投影(back project)

热门文章

  1. 【厚积薄发】Crunch压缩图片的AssetBundle打包
  2. 高级PHP工程师所应该具备的专业素养
  3. linux上网络问题
  4. Netty源码分析第5章(ByteBuf)----&gt;第2节: ByteBuf的分类
  5. PHP处理表单数据的一个安全回顾(记录教训)
  6. XSS攻击防御篇
  7. C++ 函数 参数传递方式
  8. TeamWork#3,Week5,The First Meeting of Our Team
  9. 2018-2019-20172329 《Java软件结构与数据结构》第九周学习总结
  10. pycharm 打开两个项目