【BZOJ 2654】 MST
2654: tree
Description
给你一个无向带权连通图,每条边是黑色或白色。让你求一棵最小权的恰好有need条白色边的生成树。题目保证有解。Input
第一行V,E,need分别表示点数,边数和需要的白色边数。接下来E行,每行s,t,c,col表示这边的端点(点从0开始标号),边权,颜色(0白色1黑色)。Output
一行表示所求生成树的边权和。V<=50000,E<=100000,所有数据边权为[1,100]中的正整数。Sample Input
2 2 1
0 1 1 1
0 1 2 0Sample Output
2HINT
原数据出错,现已更新 by liutian,但未重测---2016.6.24
Source
【分析】
嗯?我想不到的题。。如果不断给所有白色边加上同一个值,跑MST(边权相同先选白色边),那么选取的白色边的数量显然是不升的,就这样,最后减掉need*add就好了。
#include<cstdio>
#include<cstdlib>
#include<cstring>
#include<iostream>
#include<algorithm>
using namespace std;
#define Maxn 50010
#define Maxm 100010
#define INF 0x7fffffff int n,m,k; int mymin(int x,int y) {return x<y?x:y;} struct node
{
int x,y,c,cc,p,next;
}t[Maxm*];
int first[Maxn],len; void ins(int x,int y,int c,int p)
{
t[++len].x=x;t[len].y=y;t[len].cc=t[len].c=c;t[len].p=p;
t[len].next=first[x];first[x]=len;
} bool cmp(node x,node y)
{
if(x.c==y.c) return x.p<y.p;
return x.c<y.c;
} int fa[Maxn];
int ffa(int x)
{
if(fa[x]!=x) fa[x]=ffa(fa[x]);
return fa[x];
} int tot,now;
void check(int x)
{
tot=;now=;
for(int i=;i<=n;i++) fa[i]=i;
for(int i=;i<=len;i++) if(!t[i].p) t[i].c=t[i].cc+x;
sort(t+,t++len,cmp);
for(int i=;i<=len;i++)
{
int x=t[i].x,y=t[i].y;
if(ffa(x)!=ffa(y))
{
fa[ffa(x)]=ffa(y);
if(!t[i].p) tot++;
now+=t[i].c;
}
}
} int ffind(int l,int r)
{
int ans=INF;
while(l<=r)
{
int mid=(l+r)>>;check(mid);
if(tot>=k) ans=now-k*mid,l=mid+;
else r=mid-;
}
return ans;
} int main()
{
scanf("%d%d%d",&n,&m,&k);
len=;
memset(first,,sizeof(first));
int cnt=;
for(int i=;i<=m;i++)
{
int x,y,c,p;
scanf("%d%d%d%d",&x,&y,&c,&p);
x++;y++;
if(p==) cnt++;
ins(x,y,c,p);ins(y,x,c,p);
}
int ans=ffind(-,);
if(ans==INF) ans=;
printf("%d\n",ans);
return ;
}
2017-03-08 21:26:50
【BZOJ 2654】 MST的更多相关文章
- 【BZOJ 2654】tree
Description 给你一个无向带权连通图,每条边是黑色或白色.让你求一棵最小权的恰好有need条白色边的生成树. 题目保证有解. Input 第一行V,E,need分别表示点数,边数和需要的白色 ...
- 【BZOJ 1150】 1150: [CTSC2007]数据备份Backup (贪心+优先队列+双向链表)
1150: [CTSC2007]数据备份Backup Description 你在一家 IT 公司为大型写字楼或办公楼(offices)的计算机数据做备份.然而数据备份的工作是枯燥乏味 的,因此你想设 ...
- Kruskal算法及其类似原理的应用——【BZOJ 3654】tree&&【BZOJ 3624】[Apio2008]免费道路
首先让我们来介绍Krukal算法,他是一种用来求解最小生成树问题的算法,首先把边按边权排序,然后贪心得从最小开始往大里取,只要那个边的两端点暂时还没有在一个联通块里,我们就把他相连,只要这个图里存在最 ...
- 【BZOJ 2957】楼房重建&&Codechef COT5 Count on a Treap&&【NOIP模拟赛】Weed 线段树的分治维护
线段树是一种作用于静态区间上的数据结构,可以高效查询连续区间和单点,类似于一种静态的分治.他最迷人的地方在于“lazy标记”,对于lazy标记一般随我们从父区间进入子区间而下传,最终给到叶子节点,但还 ...
- LCA 【bzoj 4281】 [ONTAK2015]Związek Harcerstwa Bajtockiego
[bzoj 4281] [ONTAK2015]Związek Harcerstwa Bajtockiego Description 给定一棵有n个点的无根树,相邻的点之间的距离为1,一开始你位于m点. ...
- 【BZOJ 2753】 2753: [SCOI2012]滑雪与时间胶囊 (分层最小树形图,MST)
2753: [SCOI2012]滑雪与时间胶囊 Time Limit: 50 Sec Memory Limit: 128 MBSubmit: 2457 Solved: 859 Descriptio ...
- 【BZOJ 1191】 [Apio2010]特别行动队 (斜率优化)
dsy1911: [Apio2010]特别行动队 [题目描述] 有n个数,分成连续的若干段,每段的分数为a*x^2+b*x+c(a,b,c是给出的常数),其中x为该段的各个数的和.求如何分才能使得各个 ...
- 【BZOJ 1096】 [ZJOI2007]仓库建设 (斜率优化)
1096: [ZJOI2007]仓库建设 Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 3940 Solved: 1736 Description ...
- 【BZOJ 2132】圈地计划 && 【7.22Test】计划
两种版本的题面 Description 最近房地产商GDOI(Group of Dumbbells Or Idiots)从NOI(Nuts Old Idiots)手中得到了一块开发土地.据了解,这块土 ...
随机推荐
- 51nod 1073 约瑟夫环
题目链接 先说一下什么是约瑟夫环,转自:传送门 关于约瑟夫环问题,无论是用链表实现还是用数组实现都有一个共同点:要模拟整个游戏过程,不仅程序写起来比较烦,而且时间复杂度高达O(nm),当n,m非常大( ...
- Ubuntu 14.04 64位上安装wps office软件(转http://m.blog.csdn.net/blog/yhc13429826359/24179933)
废话少说,只给出方法供各位参考!wps for Linux版本已经有两三年没有大的动作,当然其他平台,比如windows,Android,ios上的wps效果还是很赞的说. 下面是我成功安装的步骤: ...
- Mac 终端自动补全忽略大小写
打开终端,输入:nano .inputrc 在里面粘贴上以下语句: set completion-ignore-case onset show-all-if-ambiguous onTAB: menu ...
- 关于HTML5服务器发送事件(SSE)
最近在看 W3School 上关于 HTML 5 的教程.在看到 HTML 5 服务器发送事件 ( SSE, server-sent event ) 时,没怎么弄明白示例代码是怎么回事,寻找其他教程, ...
- 解决IDEA导入Myclipse项目的时候没有识别为Web项目的问题
IDEA在导入一个MyEclipse新建的Web项目的时候,一般会正确检测这个项目是什么项目.不过有时候会出现各种问题. 1. 出现一些Jar包不存在的问题,一般是servlet-api这样的包不存在 ...
- IDE按住ctrl 打开单元 无效时 的方法
一般打开单元无效时 是由于程序有错误,若程序没有错误 可以重新build一下 再试. 若实在不行 就右键---open at cursor
- mac os版本Intellij IDEA 搭建spring mvc的maven工程(新手教学)
由于近期换了新公司,又换mac pro作为新电脑,打算把用了很多年的eclipse换成IDEA(IDEA比eclipse的好处我就不多说了),由于mac os和IDEA刚开始用不久,所以专门用一篇博客 ...
- beego学习笔记(4):开发文档阅读(2)
bee工具的安装和使用 bee 工具是一个为了协助快速开发 beego 项目而创建的项目,通过 bee 您可以很容易的进行 beego 项目的创建.热编译.开发.测试.和部署. go get gith ...
- django的orm中F对象的使用
今天不巧就用上了. 就是将数据库的字段,自增1的场景. from django.db.models import F DeployPool.objects.filter(name=deployvers ...
- 前端代码编辑器ace 语法验证
本文主要是介绍实际项目中如何加入语法检测功能.官方文档链接https://github.com/ajaxorg/ace/wiki/Syntax-validation 代码编辑器ace,使用webwor ...