【二分+最小生成树】bzoj2654 tree
2015-10-26 20:42
471 查看
题目链接:http://www.lydsy.com/JudgeOnline/problem.php?id=2654
题目大意:给你一个无向带权连通图,每条边是黑色或白色。让你求一棵最小权的恰好有need条白色边的生成树。
听说这题出题人是立杰 %%%%%%%%%%%%%%%%
要减少白色边的数量,正确的方法是增大白色边的边权……增加则相反,减小白色边的边权……
所以直接二分每条白色边增加或减少多少边权,然后跑最小生成树,然后最后计算答案的时候不要忘记去掉加上或减少的边权*白色边的数量……
二分和处理答案的细节有点麻烦
给一组测试数据:
4 5 1
0 1 7 0
1 2 7 0
2 3 10 1
3 0 10 1
1 3 10 1
正确答案是27
题目大意:给你一个无向带权连通图,每条边是黑色或白色。让你求一棵最小权的恰好有need条白色边的生成树。
听说这题出题人是立杰 %%%%%%%%%%%%%%%%
要减少白色边的数量,正确的方法是增大白色边的边权……增加则相反,减小白色边的边权……
所以直接二分每条白色边增加或减少多少边权,然后跑最小生成树,然后最后计算答案的时候不要忘记去掉加上或减少的边权*白色边的数量……
[code]#include <iostream> #include <cstdio> #include <algorithm> using namespace std; struct Link { int s,t,c,col; }l[200000]; int n,m,k,ans,sum; int fa[100000]; bool cmp(Link a,Link b) { if(a.c != b.c) return a.c < b.c; return a.col < b.col; } int father(int x) { if(fa[x] != x) fa[x] = father(fa[x]); return fa[x]; } bool MST(int q) { int p = 0; for(int i = 1;i <= n;i ++) fa[i] = i; for(int i = 1;i <= m;i ++) if(!l[i].col) l[i].c += q; sort(l+1,l+m+1,cmp); ans = 0; for(int i = 1;i <= m;i ++) { int x = father(l[i].s); int y = father(l[i].t); if(x != y) { fa[x] = y; ans += l[i].c; if(!l[i].col) p ++; } } for(int i = 1;i <= m;i ++) if(!l[i].col) l[i].c -= q; return p >= k; } int main() { scanf("%d%d%d",&n,&m,&k); for(int i = 1;i <= m;i ++) { scanf("%d%d%d%d",&l[i].s,&l[i].t,&l[i].c,&l[i].col); l[i].s ++; l[i].t ++; } int l = -200,r = 200; while(l <= r) { int mid = (l+r)/2; if(MST(mid)) { l = mid + 1; sum = ans-k*mid; } else r = mid - 1; } cout << sum << endl; return 0; }
二分和处理答案的细节有点麻烦
给一组测试数据:
4 5 1
0 1 7 0
1 2 7 0
2 3 10 1
3 0 10 1
1 3 10 1
正确答案是27
相关文章推荐
- 两个栈实现队列与两个队列实现栈
- Leetcode -- Word Search
- jquery ajax提交表单数据的两种方式
- 20135321余佳源——信息安全系统设计基础第七周学习总结
- IOS 第三方库- AFNetworking
- 人数骤增,对于管理的变化,主要是两个问题
- Android如何创建背景透明的Dialog
- linux MISC 驱动模型分析
- 冒泡排序及其推理方法
- d3数轴
- 境由心造,自己选择的路跪着也要走完!
- ural 1287. Mars Canals
- 家庭作业第三章3.57
- leetcode_26_ Remove Duplicates from Sorted Array (easy)
- LA 6538 Dinner Coming Soon DP
- android开发之shape详解
- Depth-First-Search(DFS伪代码)
- android开发之shape详解
- android开发之shape详解
- 对架构是怎样的理解