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 ...
随机推荐
- 浅入kubernetes(1):Kubernetes 入门基础
目录 Kubernetes 入门基础 Introduction basic of kubernetes What Is Kubernetes? Components of Kubernetes Kub ...
- sklearn中的SGDClassifier
常用于大规模稀疏机器学习问题上 1.优点: 高效 简单 2.可以选择损失函数 loss="hinge": (soft-margin)线性SVM. loss="modifi ...
- 常用的Git命令清单
目录 名词解释 开卷必读 一. 新建代码库 二.配置 三. 忽略某个文件的改动 四. 增加/删除文件 五. 代码提交 六. 分支 七. 标签 八. 查看信息 九. 远程同步 十. 撤销 十一. Git ...
- Spring中ApplicationContextAware接口的用法
1.为什么使用AppplicationContextAware? ApplicationContext的BeanFactory 的子类, 拥有更强大的功能,ApplicationContext可以在服 ...
- TCP超时重传时间的选择
一---导读 TCP超时重传时间的选择是计算机网络中较复杂的问题之一,但幸好前辈们都把路铺好了,我们只需要学习并且遵循这些规则,有能力的话去进一步改正. 二---必知的一些专业术语 A--RTT( r ...
- JS常见面试题,看看你都会多少?
1. 如何在ES5环境下实现let 这个问题实质上是在回答let和var有什么区别,对于这个问题,我们可以直接查看babel转换前后的结果,看一下在循环中通过let定义的变量是如何解决变量提升的问题 ...
- Kafka基本原理概述
Kafka的基本介绍 Kafka是最初由Linkedin公司开发,是一个分布式.分区的.多副本的.多订阅者,基于zookeeper协调的分布式日志系统(也可以当做MQ系统),常见可以用于web/ngi ...
- python之json、pickle模块
一.json模块 之前我们学习过用eval内置方法可以将一个字符串转成python对象,不过,eval方法是有局限性的,对于普通的数据类型,json.loads和eval都能用,但遇到特殊类型的时候, ...
- Thread线程控制之sleep、join、setDaemon方法的用处
Thread线程控制之sleep.join.setDaemon方法的用处 1. sleep方法 public static void sleep(long millis) throws Interru ...
- fastjsion反序列化漏洞渗透测试笔记
本文原创地址:https://www.cnblogs.com/yunmuq/p/14268028.html 一.背景 fastjsion是阿里的开源Java工具:https://github.com/ ...