博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
BZOJ 1196 [HNOI2006]公路修建问题(二分答案+并查集)
阅读量:5279 次
发布时间:2019-06-14

本文共 966 字,大约阅读时间需要 3 分钟。

 

【题目链接】 

 

【题目大意】

  对于每条可能维修的公路可选择修一级公路或者二级公路,价值不同

  要求图连通,且至少有k条一级公路时最大价值公路价值最小。

 

【题解】

  二分答案,从一级公路开始处理,利用并查集验证两个条件。

 

【代码】

#include 
#include
using namespace std;const int N=20005;int f[10005],x[N],y[N],c1[N],c2[N],l=1,r=0,ans,n,m,k;int sf(int x){return x==f[x]?x:f[x]=sf(f[x]);}bool check(int u){ int k1=0,k2=0; for(int i=1;i<=n;i++)f[i]=i; for(int i=1;i
u)continue; int fx=sf(x[i]),fy=sf(y[i]); if(fx!=fy){ f[fy]=fx; k1++; } } for(int i=1;i
u)continue; int fx=sf(x[i]),fy=sf(y[i]); if(fx!=fy){ f[fy]=fx; k2++; } }return (k1>=k&&k1+k2==n-1);}int main(){ scanf("%d%d%d",&n,&k,&m); for(int i=1;i
>1; if(check(mid))r=mid-1,ans=mid; else l=mid+1; }printf("%d\n",ans); return 0;}

  

转载于:https://www.cnblogs.com/forever97/p/bzoj1196.html

你可能感兴趣的文章
Jenkins+ProGet+Windows Batch搭建全自动的内部包(NuGet)打包和推送及管理平台
查看>>
线程池的概念
查看>>
Java 序列化
查看>>
Java 时间处理实例
查看>>
Java 多线程编程
查看>>
Java 数组实例
查看>>
mysql启动过程
查看>>
2017前端面试题总结
查看>>
SWIFT国际资金清算系统
查看>>
站立会议第四天
查看>>
利用AMPScript获取Uber用户数据的访问权限
查看>>
生成随机数的模板
查看>>
Mysql 数据库操作
查看>>
转:linux终端常用快捷键
查看>>
UVa 11059 最大乘积
查看>>
数组分割问题求两个子数组的和差值的小
查看>>
composer 报 zlib_decode(): data error
查看>>
hdu 3938 并查集
查看>>
《深入分析Java Web技术内幕》读书笔记之JVM内存管理
查看>>
python之GIL release (I/O open(file) socket time.sleep)
查看>>