[bzoj2654]tree 二分+最小生成树
来源:互联网 发布:苹果淘宝下载 编辑:程序博客网 时间:2024/05/17 18:29
2654: tree
Time Limit: 30 Sec Memory Limit: 512 MB[Submit][Status][Discuss]
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 0
0 1 1 1
0 1 2 0
Sample Output
2
HINT
原数据出错,现已更新 by liutian,但未重测---2016.6.24
Source
就二分再kruskal一下就完了。没做头
#include<algorithm>#include<iostream>#include<cstring>#include<cstdio>using namespace std;const int N = 100005;struct Edge{int u,v,w,c;}e[N];int a[N],u[N],v[N],w[N],c[N],fa[N],n,m,maxn,ans,scnt,cnt,need;int find( int x ){ return fa[x] == x ? x : fa[x] = find(fa[x]); }bool cmp( Edge a, Edge b ){ return a.w == b.w ? a.c < b.c : a.w < b.w; }bool check( int x ){scnt = 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;}std::sort( e+1, e+m+1, cmp );for( int i = 1; i <= m; i++ ){int A = find(e[i].u), B = find(e[i].v);if( A != B ){fa[A] = fa[B]; if(!e[i].c) scnt++;cnt += e[i].w;}}return scnt >= need;}int main(){scanf("%d", &n); scanf("%d", &m); scanf("%d", &need);for( int i = 1; i <= m; i++ ) scanf("%d%d%d%d", &u[i], &v[i], &w[i], &c[i]),u[i]++,v[i]++;int l = -105, r = 105;while( l <= r ){int mid = (l+r)>>1;if( check(mid) ) l = mid+1, ans = cnt-need*mid;else r = mid-1;}printf("%d", ans);return 0;}
阅读全文
0 0
- 【bzoj2654】【tree】【二分+最小生成树】
- 【二分+最小生成树】bzoj2654 tree
- bzoj2654 Tree 二分答案+最小生成树
- 【BZOJ2654】tree【二分】【最小生成树】
- bzoj2654 tree 最小生成树+二分验证
- [bzoj2654]tree 二分+最小生成树
- 【bzoj2654】【二分+最小生成树】tree
- [bzoj2654]tree(二分+最小生成树)
- 【二分+最小生成树】BZOJ2654[tree]题解
- 【二分+最小生成树】BZOJ2654 tree
- [bzoj2654][最小生成树][二分]tree
- bzoj2654: tree(二分+最小生成树)
- bzoj2654 二分+最小生成树
- bzoj2654 二分答案+最小生成树
- bzoj2654 tree(二分+kruskal)
- [WQS二分] BZOJ2654:tree
- bzoj2654 tree(kruskal+二分)
- BZOJ 2654 tree 二分+最小生成树
- 创建Windows窗口
- 推荐 SpringMVC 的 Controller 返回各种视图的处理方式(3))
- 回文数的形成
- MySQL安装
- 极坐标下的二重积分
- [bzoj2654]tree 二分+最小生成树
- React-navigation StackNavigator 使用攻略
- 代理IP,爬微信公众号的网页
- 反射(1)——构造方法
- 【剑指offer】题39:二叉树的深度
- POJ
- 浅谈特征工程(一)
- 数据库备份还原
- POJ