【bzoj2654】 tree
来源:互联网 发布:大数据与BI 编辑:程序博客网 时间:2024/05/29 13:21
http://www.lydsy.com/JudgeOnline/problem.php?id=2654 (题目链接)
今天考试题,以为是神题不可做,直接放弃了。。没想到这么水。。
题意:给你一个无向带权连通图,每条边是黑色或白色。让你求一棵最小权的恰好有need条白色边的生成树。题目保证有解。
solution
我们考虑把白边的权值增加,因为无论白边的权值增加多少,最小生成树中的白边不会改变。所以我们二分每次把所有白边的权值增加多少,按边权大小排序后克鲁斯卡尔看选出的白边是否大于need。统计答案。
代码:
// bzoj2654#include<algorithm>#include<iostream>#include<cstdlib>#include<cstring>#include<cstdio>#include<cmath>#define LL long long#define inf 2147483640#define Pi acos(-1.0)#define free(a) freopen(a".in","r",stdin),freopen(a".out","w",stdout);using namespace std;const int maxn=1000010;struct edge { int u,v,w,c; friend bool operator < (const edge &a,const edge &b) { return a.w==b.w?a.c<b.c:a.w<b.w; }}e[maxn];LL fa[maxn],u[maxn],v[maxn],w[maxn],c[maxn],tot,cnt,n,m,ned,sumv;int find(int x) { return x==fa[x]?x:fa[x]=find(fa[x]);}bool check(int x) { tot=cnt=0; for (int i=1;i<=n;i++) fa[i]=i; for (int i=1;i<=m;i++) { e[i].u=u[i],e[i].v=v[i],e[i].w=w[i],e[i].c=c[i]; if (!c[i]) e[i].w+=x; } sort(e+1,e+m+1); for (int i=1;i<=m;i++) { int p=find(e[i].u),q=find(e[i].v); if (p!=q) { fa[p]=q; tot+=e[i].w; if (!e[i].c) cnt++; } } return cnt>=ned;}int main() { scanf("%lld%lld%lld",&n,&m,&ned); for (int i=1;i<=m;i++) { scanf("%lld%lld%lld%lld",&u[i],&v[i],&w[i],&c[i]); u[i]++;v[i]++; } int l=-10005,r=10005; while (l<=r) { int mid=(l+r)>>1; if (check(mid)) l=mid+1,sumv=tot-ned*mid; else r=mid-1; } printf("%lld",sumv); return 0;}
0 0
- [BZOJ2654] tree
- 【bzoj2654】 tree
- [bzoj2654] tree
- bzoj2654 tree
- 【Bzoj2654】tree
- bzoj2654: tree
- 【bzoj2654】tree
- bzoj2654: tree
- bzoj2654 tree
- 【bzoj2654】tree MST+二分法
- bzoj2654 tree(二分+kruskal)
- [WQS二分] BZOJ2654:tree
- 【国家集训队2012】【BZOJ2654】tree
- bzoj2654 tree(kruskal+二分)
- 【bzoj2654】【tree】【二分+最小生成树】
- 【二分+最小生成树】bzoj2654 tree
- bzoj2654 Tree 二分答案+最小生成树
- 【BZOJ2654】tree【二分】【最小生成树】
- 第一次尝试使用 AS 调用JNI~
- wpf图片轮播(未释放资源)
- CodeForces 558 C. Amr and Chemistry && 51NOD 1483 化学变换(暴力 + 贪心)
- html5--canvas上篇
- SDWebImage使用——一个可管理远程图片加载的类库
- 【bzoj2654】 tree
- Part2:重新组织函数
- Python爬虫入门六之Cookie的使用
- linux命令zxvf
- RequiresPermissions 依据多个值设置权限
- 13 在O(1)时间内删除链表节点
- 51nod 1135 原根
- 100多个程序员常去的网站
- MVC模式-简单的java小例子