【BZOJ】1196: [HNOI2006]公路修建问题
2017-02-22 20:50
295 查看
传送门:http://www.lydsy.com/JudgeOnline/problem.php?id=1196
二分答案,判定
二分答案,判定
#include<stdio.h> #include<algorithm> using namespace std; #define Bool inline bool #define cint const int & #define N 20005 int n,k,m,f ,p1 ,c1 ,p2 ,c2 ,u ,v ; Bool cmp1(cint a,cint b){return c1[a]<c1[b];} Bool cmp2(cint a,cint b){return c2[a]<c2[b];} int gf(cint a){return f[a]==a?a:f[a]=gf(f[a]);} Bool judge(cint mid) { for (int i=1;i<=n;i++) f[i]=i;int tot=0; for (int i=1;i<=m && c1[p1[i]]<=mid && tot<n-1;i++) if (gf(u[p1[i]])!=gf(v[p1[i]])) f[f[u[p1[i]]]]=f[v[p1[i]]],tot++; if (tot<k) return 0; for (int i=1;i<=m && c2[p2[i]]<=mid && tot<n-1;i++) if (gf(u[p2[i]])!=gf(v[p2[i]])) f[f[u[p2[i]]]]=f[v[p2[i]]],tot++; return tot==n-1; } int main() { scanf("%d%d%d",&n,&k,&m);m-=1; for (int i=1;i<=m;i++) scanf("%d%d%d%d",u+i,v+i,c1+i,c2+i),p1[i]=i,p2[i]=i; sort(p1+1,p1+m+1,cmp1);sort(p2+1,p2+m+1,cmp2); int l=1,r=30000; for (int mid=15000;l<r;mid=l+r>>1) if (judge(mid)) r=mid;else l=mid+1; printf("%d",l); }
相关文章推荐
- 【分块答案】【最小生成树】【kruscal】bzoj1196 [HNOI2006]公路修建问题
- 【BZOJ1196】【HNOI2006】公路修建问题
- [bzoj1196][HNOI2006]公路修建问题
- 【BZOJ 1196】【HNOI 2006】公路修建问题 【二分+并查集】
- BZOJ 1196: [HNOI2006]公路修建问题 Kruskal/二分
- 【BZOJ 1196】 [HNOI2006]公路修建问题
- BZOJ 1196: [HNOI2006]公路修建问题(二分+生成树)
- bzoj1196[HNOI2006]公路修建问题
- BZOJ 1196 [HNOI2006]公路修建问题(二分答案+并查集)
- BZOJ1196: [HNOI2006]公路修建问题
- BZOJ 1196: [HNOI2006]公路修建问题 Kruskal/二分
- [BZOJ1196] [HNOI2006]公路修建问题
- BZOJ 1196: [HNOI2006]公路修建问题( MST )
- bzoj1196[HNOI2006]公路修建问题
- BZOJ 1196 HNOI 2006 公路修建问题 二分答案+并查集
- 【bzoj1196】【HNOI2006】【公路修建问题】【并查集】
- 【最小生成树】BZOJ 1196: [HNOI2006]公路修建问题
- 8.23 bzoj1196[HNOI2006]公路修建问题
- bzoj 1196: [HNOI2006]公路修建问题 二分+并查集
- BZOJ1196 [HNOI2006] 公路修建问题