tree (一本通练习||清华集训互测)
tree
题目描述
给你一个无向带权连通图,每条边是黑色或白色。让你求一棵最小权的恰好有need条白色边的生成树。题目保证有解。
输入格式
第一行V,E,need分别表示点数,边数和需要的白色边数。
接下来E行,每行s,t,c,col表示这边的端点(点从0开始标号),边权,颜色(0白色1黑色)。
输出格式
一行表示所求生成树的边权和。
V<=50000,E<=100000,所有数据边权为[1,100]中的正整数。
样例
样例输入
2 2 1
0 1 1 1
0 1 2 0
样例输出
2
数据范围与提示
原数据出错,现已更新 by liutian,但未重测---2016.6.24
也是一个做法比较玄学的题
二分答案,考虑我们往白边上加值或者减值,那么就会对应的少选白边或者少选黑边
那么如果当前 白边+mid如果kuskal选择白边比need多就继续往上面加值,如果选择白边比need少就往下减值
因为kuskal保证图一定连通,并且代价最小。所以保证了正确性
#include<bits/stdc++.h>
#define ll long long
#define A 10000000
using namespace std;
struct edge{
ll x,y,z,id;
ll flag;
}e[A];
ll n,m,need,fa[A],zong,ans,end[A];
inline ll read()
{
ll f=1,x=0;char c=getchar();
while(!isdigit(c)){if(c=='-') f=-1;c=getchar();}
while(isdigit(c)){x=x*10+c-'0';c=getchar();}
return f*x;
}
ll find(ll x)
{
if(fa[x]!=x) fa[x]=find(fa[x]);
return fa[x];
}
void hebing(ll x,ll y)
{
x=find(x),y=find(y); if(x!=y) fa[y]=x;
}
bool cmp(edge a,edge b){return (a.z==b.z)?(a.flag<b.flag):(a.z<b.z);}
inline void kuskar(ll mid)
{
for(ll i=0;i<=n;i++)
fa[i]=i;
zong=0,ans=0;
for(ll i=1;i<=m;i++)
if(!e[i].flag)
e[i].z+=mid;
sort(e+1,e+m+1,cmp);
for(ll i=1;i<=m;i++)
{
if(find(e[i].x)!=find(e[i].y))
{
if(!e[i].flag)
zong++;
hebing(e[i].x,e[i].y);
ans+=e[i].z;
}
}
for(ll i=1;i<=m;i++)
if(!e[i].flag)
e[i].z-=mid;
}
int main()
{
ll tot=0;
n=read(),m=read(),need=read();
for(ll i=1;i<=m;i++)
e[i].x=read(),e[i].y=read(),e[i].z=read(),e[i].flag=read();
ll l=-100,r=100;
while(l<=r)
{
ll mid=(l+r)>>1;
kuskar(mid);
if(zong>=need) l=mid+1,tot=ans-need*mid;
else r=mid-1;
}
cout<<tot<<endl;
}
tree (一本通练习||清华集训互测)的更多相关文章
- AC日记——【清华集训2014】奇数国 uoj 38
#38. [清华集训2014]奇数国 思路: 题目中的number与product不想冲: 即为number与product互素: 所以,求phi(product)即可: 除一个数等同于在模的意义下乘 ...
- [LOJ#2330]「清华集训 2017」榕树之心
[LOJ#2330]「清华集训 2017」榕树之心 试题描述 深秋.冷风吹散了最后一丝夏日的暑气,也吹落了榕树脚下灌木丛的叶子.相识数年的Evan和Lyra再次回到了小时候见面的茂盛榕树之下.小溪依旧 ...
- [清华集训2016]石家庄的工人阶级队伍比较坚强——三进制FWT
题目链接: [清华集训2016]石家庄的工人阶级队伍比较坚强 题目大意:有$n=3^m$个人玩石头剪刀布,共$t$轮游戏,每轮每个人要和包括自己的所有人各进行$m$次石头剪刀布.每个人在$m$轮中的决 ...
- UOJ #274. 【清华集训2016】温暖会指引我们前行 [lct]
#274. [清华集训2016]温暖会指引我们前行 题意比较巧妙 裸lct维护最大生成树 #include <iostream> #include <cstdio> #incl ...
- 清华集训2015 V
#164. [清华集训2015]V http://uoj.ac/problem/164 统计 描述 提交 自定义测试 Picks博士观察完金星凌日后,设计了一个复杂的电阻器.为了简化题目,题目中的常数 ...
- 【luoguP4006 清华集训2017】小Y和二叉树
题目描述 小 Y 是一个心灵手巧的 OIer,她有许多二叉树模型. 小 Y 的二叉树模型中,每个结点都具有一个编号,小 Y 把她最喜欢的一个二叉树模型挂在了墙上,树根在最上面,左右子树分别在树根的左下 ...
- UOJ_274_[清华集训2016]温暖会指引我们前行_LCT
UOJ_274_[清华集训2016]温暖会指引我们前行_LCT 任务描述:http://uoj.ac/problem/274 本题中的字典序不同在于空串的字典序最大. 并且题中要求排序后字典序最大. ...
- UOJ 275. 【清华集训2016】组合数问题
UOJ 275. [清华集训2016]组合数问题 组合数 $C_n^m $表示的是从 \(n\) 个物品中选出 \(m\) 个物品的方案数.举个例子,从$ (1,2,3)(1,2,3)$ 三个物品中选 ...
- UOJ #269. 【清华集训2016】如何优雅地求和
UOJ #269. [清华集训2016]如何优雅地求和 题目链接 给定一个\(m\)次多项式\(f(x)\)的\(m+1\)个点值:\(f(0)\)到\(f(m)\). 然后求: \[ Q(f,n,x ...
随机推荐
- Python 之父爆料:明年至少令 Python 提速 1 倍!
大概在半年前,我偶然看到一篇文章,有人提出了给 Python 提速 5 倍的计划,并在寻找经费赞助.当时并没有在意,此后也没有看到这方面的消息. 但是,就在 5 月 13 日"2021 年 ...
- OO_Unit1_表达式求导
CSDN链接 一.第一次作业 1.需求分析 简单多项式导函数 带符号整数 支持前导0的带符号整数,符号可省略,如: +02.-16.19260817等. 幂函数 一般形式 由自变量x和指数组成,指数为 ...
- 为什么说Zoho CRM是最好的销售预测系统?
在文章的开头,我们来讲讲什么是销售预测--销售预测是指利用销售管道中的商机.已完成的配额.有望完成目标的销售团队或个人等关键信息对产品的销售数量与销售金额进行预测的手段.企业在制定销售计划时的重要任务 ...
- top命令查看CPU状态信息:%us、%sy、%ni、%id、%wa、%hi、%si、%st 表示的是什么意思
Linux CPU负载状态:%us/%sy/%ni/%id/%wa/%hi/%si/%st含义 2018-08-26 分类:Linux 评论(0) 缙哥哥发现用了雅黑的探针,在 Linux 的 C ...
- 使用find命令查找大文件
使用find命令查找大文件 find命令是Linux系统管理员工具库中最强大的工具之一.它允许您根据不同的标准(包括文件大小)搜索文件和目录. 例如,如果在当前工作目录中要搜索大小超过100MB的文件 ...
- cgic: CGI的C函数库-(转自COS)
下载回源码包以后,就3个文件:cgic.c 函数库capture.c 一个很简单的CGI例子,仅仅输出两行提示文字cgictest.c 一个演示读取form表单数据的CGI例子 首先在 ...
- 调试备忘录-SWD协议解析
目录--点击可快速直达 目录 写在前面 1 SWD协议简介 2 SWD物理层协议解析 2.1 SWD通信时序分析 2.2 SWD 寄存器简介 2.2.1 DP寄存器 2.2.2 AP寄存器 ...
- java并发编程工具类JUC第二篇:ArrayBlockingQueue
类ArrayBlockingQueue是BlockingQueue接口的实现类,它是有界的阻塞队列,内部使用数组存储队列元素.这里的"有界"是指存储容量存在上限,不能无限存储元素. ...
- l初识CSRF(跨站请求伪造)
一 CSRF是什么 CSRF(Cross-site request forgery)跨站请求伪造,也被称为"One Click Attack"或者Session Riding,通常 ...
- Linux(CentOS7)下配置多个tomcat
记录 Linux(CentOS7) 下配置多个 tomcat 的操作过程. 一.下载tomcat 前提:安装配置好jdk环境,未配置可参考Linux(CentOS7)下安装jdk1.8. 从 tomc ...