给白色边都加上一个值,二分这个值,使得选取的白边数量减少

#include<algorithm>
#include<iostream>
#include<cstdlib>
#include<cstring>
#include<cstdio>
#include<cmath>
using namespace std; typedef long long LL; #define N 100010 struct Node
{
int x,y,z,c;
}e[N],a[N]; int n,m,need; LL ans,cnt,tot; int l,r,mid; int f[N]; int cmp(Node a,Node b)
{
return a.z==b.z ? a.c<b.c : a.z<b.z;
} int find(int x)
{
return f[x]!=x ? f[x]=find(f[x]) : f[x];
} void kruskal()
{
cnt=0,ans=0;
int k=0;
for (int i=1;i<=n;i++)
f[i]=i;
for (int i=1;k<n-1;i++)
{
int fa=find(e[i].x);
int fb=find(e[i].y);
if (fa!=fb)
{
f[fa]=fb;
ans+=e[i].z;
k++;
if (!e[i].c)
cnt++;
}
}
} int main()
{
scanf("%d%d%d",&n,&m,&need);
for (int i=1;i<=m;i++)
scanf("%d%d%d%d",&a[i].x,&a[i].y,&a[i].z,&a[i].c),a[i].x++,a[i].y++;
l=-1010,r=1010;
while (l<=r)
{
mid=(l+r)>>1;
for (int i=1;i<=m;i++)
e[i]=a[i];
for (int i=1;i<=m;i++)
if (!e[i].c)
e[i].z-=mid;
sort(e+1,e+m+1,cmp);
kruskal();
if (cnt<need)
l=mid+1;
else
r=mid-1,tot=ans+need*mid;
}
printf("%lld\n",tot);
return 0;
}

  

【bzoj2654]】tree的更多相关文章

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

    [BZOJ2654]Tree(凸优化,最小生成树) 题面 BZOJ 洛谷 题解 这道题目是之前\(Apio\)的时候写的,忽然发现自己忘记发博客了... 这个万一就是一个凸优化, 给所有白边二分一个额 ...

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

    [BZOJ2654]tree Description 给你一个无向带权连通图,每条边是黑色或白色.让你求一棵最小权的恰好有need条白色边的生成树. 题目保证有解. Input 第一行V,E,need ...

  3. 【bzoj2654】 tree

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

  4. 二分+最小生成树【bzoj2654】: tree

    2654: tree 给你一个无向带权连通图,每条边是黑色或白色.让你求一棵最小权的恰好有need条白色边的生成树. 题目保证有解. 二分答案,然后跑最小生成树判断. 注意优先跑白色边. code: ...

  5. 【BZOJ2654】tree

    Time Limit: 30 Sec Memory Limit: 512 MB Description ​ 给你一个无向带权连通图,每条边是黑色或白色.让你求一棵最小权的恰好有need条白色边的生成树 ...

  6. 【bzoj2654】tree 二分+Kruscal

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

  7. 【BZOJ2654】tree(生成树 二分)

    题目链接 大意 给你一个无向带权连通图,每条边是黑色或白色,求一棵最小权的恰好有\(Need\)条白色边的生成树. 题目保证有解,输出最小权值. 其中每条边权在\([1,100]\)范围内. 思路 首 ...

  8. 【POJ3237】Tree 树链剖分+线段树

    [POJ3237]Tree Description You are given a tree with N nodes. The tree's nodes are numbered 1 through ...

  9. 【BZOJ】【2631】Tree

    LCT 又一道名字叫做Tree的题目…… 看到删边加边什么的……又是动态树问题……果断再次搬出LCT. 这题比起上道[3282]tree的难点在于需要像线段树维护区间那样,进行树上路径的权值修改&am ...

随机推荐

  1. jquery data属性 attr vs data

    html5的自定义data属性相信大家都不会陌生,有了它你可以绑定所需的数据到指定元素上.然后通过jquery设置.获取数据,简直开心的不行啊.想到设置.获取元素属性值,大家一定首先想到了jquery ...

  2. assert.ifError()函数详解

    assert.ifError(value) 如果 value 为真值时,抛出 value.当测试在回调函数里的参数 error 时非常有用. const assert = require('asser ...

  3. stark组件之显示页面内容搭建(六)

    之前主要介绍了前端页面list_fiter功能的显示,但是list_display功能的展示并没有过多介绍,这里介绍一下是如何实现的. 可以看到凡是蓝线圈起来的都是通过字段名反射一个个取出来的,红线的 ...

  4. Python基础 - pip导出依赖环境和安装依赖环境的命令

    导出:    pip freeze > requirements.txt 安装:    pip install -r requirements.txt

  5. LeetCode(33)Search in Rotated Sorted Array

    题目 Suppose a sorted array is rotated at some pivot unknown to you beforehand. (i.e., 0 1 2 4 5 6 7 m ...

  6. 一起去打CS(codevs 5059)

    题目描述 Description 早就和lyk约好了去打cs,一直没找着时间,终于今天我家没人,他家也没人,总算可以出去了.但是偏偏天公不作美,某某人非要留那么多题要做.没办法只能尽快做完然后抓紧时间 ...

  7. android 实现照相功能 照片存放在SID卡中,将照片显示在Image中

    protected static final int CAMERA_RESULT = 0; private String fileName; private Button takePhotoBn; p ...

  8. Nginx 的 server_names_hash_bucket_size 问题

    在 Nginx 0.6.35 的版本中,配置多个 server 虚拟主机,必须要在配置文档中 http { 里头加上 server_names_hash_bucket_size 64; 这么一句 ht ...

  9. HDU4325 树状数组+离散化

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4325 Flowers Time Limit: 4000/2000 MS (Java/Others)   ...

  10. Floyd算法——保存路径——输出路径 HDU1385

    题目链接 http://acm.hdu.edu.cn/showproblem.php?pid=1385 参考 http://blog.csdn.net/shuangde800/article/deta ...