LOJ10069 TREE
题目描述
原题来自:2012 年国家集训队互测
给你一个无向带权连通图,每条边是黑色或白色。让你求一棵最小权的恰好有 need 条白色边的生成树。题目保证有解。
输入格式
第一行 V,E,need 分别表示点数,边数和需要的白色边数。
接下来 E 行,每行 s,t,c,col 表示这边的端点(点从 0 开始标号),边权,颜色( 0白色,1 黑色)。
输出格式
一行表示所求生成树的边权和。
样例
样例输入
2 2 1
0 1 1 1
0 1 2 0
样例输出
2
数据范围与提示
对于所有数据,V<=5e4,E<=1e5边权为 [ 1,100 ] 中的正整数。
___________________________________________________
想要加入的边数刚好是need条,需要在边上附加权值,控制加入的多少。
所以二分增加的权值,让后最小生成树。
本来很简单,但是刚开始的方法是当条数为need时统计加权以前的边的权值之和,这样会出现所有白边黑白等长而由于白边在前,从而无法取到黑边,白边又超过need的情况,无法解决。所以改为统计加权前的边的和再减去增加权乘以need的积,答案正确。为什么need条数不对还正确呢?因为黑白边等长!!!
___________________________________________________
1 #include<bits/stdc++.h>
2 using namespace std;
3 const int maxn=5e4+10;
4 const int maxm=1e5+10;
5 int n,m,need;
6 struct edge
7 {
8 int u,v,w,ww,c;
9 }e[maxm];
10 bool cmp(edge a,edge b)
11 {
12 return a.ww==b.ww?a.c<b.c:a.ww<b.ww;
13 }
14 int fa[maxm];
15 int find(int x)
16 {
17 return fa[x]==x?x:fa[x]=find(fa[x]);
18 }
19 int ans;
20 int pd(int x)
21 {
22 for(int i=0;i<m;++i)e[i].ww=e[i].w+(e[i].c==0?x:0);
23 sort(e,e+m,cmp);
24 for(int i=1;i<=n;++i)fa[i]=i;
25 ans=0;
26 int cntb=0,cnt=0;
27 for(int i=0;i<m;++i)
28 {
29 int a=find(e[i].u),b=find(e[i].v);
30 if(a!=b)
31 {
32 cnt++;
33 ans+=e[i].ww;
34 fa[a]=b;
35 if(e[i].c==0)cntb++;
36 if(cnt==n-1)break;
37 }
38 }
39 return cntb;
40 }
41 int da;
42 int main()
43 {
44 scanf("%d%d%d",&n,&m,&need);
45 for(int i=0;i<m;++i)
46 {
47 scanf("%d%d%d%d",&e[i].u,&e[i].v,&e[i].w,&e[i].c);
48 e[i].u++;
49 e[i].v++;
50 }
51 int l=-101,r=101;
52 while(l<=r)
53 {
54 int mid=(l+r)>>1,tf=pd(mid);
55 if(tf>=need)
56 {
57 l=mid+1;
58 da=ans-need*mid;
59 }
60 else
61 {
62 r=mid-1;
63 }
64 }
65 cout<<da;
66 return 0;
67 }
LOJ10069 TREE的更多相关文章
- [数据结构]——二叉树(Binary Tree)、二叉搜索树(Binary Search Tree)及其衍生算法
二叉树(Binary Tree)是最简单的树形数据结构,然而却十分精妙.其衍生出各种算法,以致于占据了数据结构的半壁江山.STL中大名顶顶的关联容器--集合(set).映射(map)便是使用二叉树实现 ...
- SAP CRM 树视图(TREE VIEW)
树视图可以用于表示数据的层次. 例如:SAP CRM中的组织结构数据可以表示为树视图. 在SAP CRM Web UI的术语当中,没有像表视图(table view)或者表单视图(form view) ...
- 无限分级和tree结构数据增删改【提供Demo下载】
无限分级 很多时候我们不确定等级关系的层级,这个时候就需要用到无限分级了. 说到无限分级,又要扯到递归调用了.(据说频繁递归是很耗性能的),在此我们需要先设计好表机构,用来存储无限分级的数据.当然,以 ...
- 2000条你应知的WPF小姿势 基础篇<45-50 Visual Tree&Logic Tree 附带两个小工具>
在正文开始之前需要介绍一个人:Sean Sexton. 来自明尼苏达双城的软件工程师.最为出色的是他维护了两个博客:2,000Things You Should Know About C# 和 2,0 ...
- Leetcode 笔记 110 - Balanced Binary Tree
题目链接:Balanced Binary Tree | LeetCode OJ Given a binary tree, determine if it is height-balanced. For ...
- Leetcode 笔记 100 - Same Tree
题目链接:Same Tree | LeetCode OJ Given two binary trees, write a function to check if they are equal or ...
- Leetcode 笔记 99 - Recover Binary Search Tree
题目链接:Recover Binary Search Tree | LeetCode OJ Two elements of a binary search tree (BST) are swapped ...
- Leetcode 笔记 98 - Validate Binary Search Tree
题目链接:Validate Binary Search Tree | LeetCode OJ Given a binary tree, determine if it is a valid binar ...
- Leetcode 笔记 101 - Symmetric Tree
题目链接:Symmetric Tree | LeetCode OJ Given a binary tree, check whether it is a mirror of itself (ie, s ...
随机推荐
- AWS中国区的那些“坑”
前言 最近做的一个项目是要把公司在国外已经上线的一个物联网的项目移植到AWS中国区来. 由于AWS属于国外云产商,在中国运营,必须符合国家的相关规定: 必须是合资公司 (AWS北京区由北京光环新网运营 ...
- Java学习日报7.8
public class 定义要求文件名和类名保持一致,一个*.Java文件只允许有一个public class定义! 主方法是一切程序的起点, public static void main(Str ...
- 吞食鱼2(FeedingFrenzyTwo) 修改器
吞食鱼2(FeedingFrenzyTwo) 修改器 童年回忆系列.小时候特别喜欢玩这类游戏,软件不大,很慢的网速也不会下载太久,然后对配置要求不高,很破的电脑也可以玩得很开心.不过也有糟心的时候啊, ...
- python之scrapy篇(三)
一.创建工程(cmd) scrapy startproject xxxx 二.编写item文件 # -*- coding: utf-8 -*- # Define here the models for ...
- 深入理解linux-free命令原理(2)
linux free 命令用法说明 概述: 这篇文章比较深入的从free为起点 折射出的一些概念:比如 buff/cache是怎么一回事[涉及内存页等话题]: available这个参数与fre ...
- 如何使用容器镜像服务 TCR 轻松实现容器 DevOps
作者周明,腾讯云容器产品工程师.目前主要负责腾讯云TKE.TCR等产品控制台的相关研发工作. 概述 当你使用云厂商提供的容器服务部署业务服务后,是否对交付部署全链路的效率有更高的需求,例如实现基于容器 ...
- k8s之API Server认证
集群安全性 在生产环境中,必须保障集群用户的角色以及权限问题,不能给所有用户都赋予管理员权限. 1.集群的安全性必须考虑如下几个目标 (1)保证容器与其所在宿主机的隔离 (2)限制容器给基础设置或其他 ...
- 我是如何在短期内快速掌握Dubbo的原理和源码的(纯干货)?
写在前面 上周,在[Dubbo系列专题]中更新了两篇文章<冰河开始对Dubbo下手了!>和<俯瞰Dubbo全局,阅读源码前必须掌握这些!!>,收到了很多小伙伴的微信私聊消息,大 ...
- 万万没想到,JVM内存区域的面试题也可以问的这么难?
二.Java内存区域 1.Java内存结构 内存结构 程序计数器 当前线程所执行字节码的行号指示器.若当前方法是native的,那么程序计数器的值就是undefined. 线程私有,Java内存区域中 ...
- OSTU大津法图像分割
OSTU图像分割 最大类间方差法,也成大津法OSTU,它是按图像的灰度特性,将图像分成背景和目标2部分.背景和目标之间的类间方差越大,说明构成图像的2部分的差别越大,当部分目标错分为背景或部分背景错分 ...