http://www.lydsy.com/JudgeOnline/problem.php?id=2654 (题目链接)

题意

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

solution

  今天考试题,以为是神题不可做,直接放弃了。。没想到这么水。。我们考虑把白边的权值增加,因为无论白边的权值增加多少,最小生成树中的白边不会改变。所以我们二分每次把所有白边的权值增加多少,按边权大小排序后克鲁斯卡尔看选出的白边是否大于need。统计答案

细节

  若黑白两边权值相同,优先选择白边加入最小生成树

代码

// bzoj2654
#include<algorithm>
#include<iostream>
#include<cstdlib>
#include<cstring>
#include<cstdio>
#include<cmath>
#define LL long long
#define inf 2147483640
#define Pi acos(-1.0)
#define free(a) freopen(a".in","r",stdin),freopen(a".out","w",stdout);
using namespace std; const int maxn=1000010;
struct edge {
int u,v,w,c;
friend bool operator < (const edge &a,const edge &b) {
return a.w==b.w?a.c<b.c:a.w<b.w;
}
}e[maxn];
LL fa[maxn],u[maxn],v[maxn],w[maxn],c[maxn],tot,cnt,n,m,ned,sumv; int find(int x) {
return x==fa[x]?x:fa[x]=find(fa[x]);
}
bool check(int x) {
tot=cnt=0;
for (int i=1;i<=n;i++) fa[i]=i;
for (int i=1;i<=m;i++) {
e[i].u=u[i],e[i].v=v[i],e[i].w=w[i],e[i].c=c[i];
if (!c[i]) e[i].w+=x;
}
sort(e+1,e+m+1);
for (int i=1;i<=m;i++) {
int p=find(e[i].u),q=find(e[i].v);
if (p!=q) {
fa[p]=q;
tot+=e[i].w;
if (!e[i].c) cnt++;
}
}
return cnt>=ned;
}
int main() {
scanf("%lld%lld%lld",&n,&m,&ned);
for (int i=1;i<=m;i++) {
scanf("%lld%lld%lld%lld",&u[i],&v[i],&w[i],&c[i]);
u[i]++;v[i]++;
}
int l=-10005,r=10005;
while (l<=r) {
int mid=(l+r)>>1;
if (check(mid)) l=mid+1,sumv=tot-ned*mid;
else r=mid-1;
}
printf("%lld",sumv);
return 0;
}

  

最新文章

  1. xcode 常见错误报错问题!
  2. react native改变app的图标和名称
  3. NOI模拟赛 Day1
  4. 译:Google的大规模集群管理工具Borg(二)------ Borg架构
  5. PS如何查找自己想要的字体
  6. MySQL创建数据表
  7. 【Android车载系统 News | Tech 3】News 从手机征战到汽车 Android Auto对比CarPlay 2014-12-29
  8. 【转】手把手教你利用Jenkins持续集成iOS项目
  9. iOS开发之静态库.a的制作教程
  10. IOS5开发-http get/post调用mvc4 webapi互操作(图片上传)[转]
  11. Java对象序列化
  12. 第九篇:Map/Reduce 工作机制分析 - 作业的执行流程
  13. VB.NET 泛型类型的应用经验
  14. mysql 随机数 rand使用
  15. 了解PID控制
  16. vscode 添加 includePath
  17. 使用Python对Twitter进行数据挖掘(Mining Twitter Data with Python)
  18. Python全栈学习_day002知识点
  19. Python调用C++类
  20. Python缩进与if语句 空格的魅力

热门文章

  1. P1835 素数密度_NOI导刊2011提高(04)
  2. usb驱动开发21之驱动生命线
  3. jboss的时区问题
  4. Spring MVC 前后端 Json 方式交互和处理
  5. EF分页中的陷阱
  6. 高性能JavaScript 达夫设备
  7. EF 相见恨晚的Attach方法
  8. jquery图片轮播效果(unslider)
  9. Uwp Windows10获取设备位置(经纬度)
  10. Value cannot be null or empty. 参数名: contentPath