bzoj3454 家族(并查集)
来源:互联网 发布:apache搭建http服务器 编辑:程序博客网 时间:2024/06/05 05:42
首先按频率从小到大排序,然后枚举区间左端点,再枚举区间右端点,往右枚举右端点时可以用并查集维护答案。
#include <cstdio>#include <cstring>#include <algorithm>#define N 1005#define M 5005#define inf 0x7fffffffinline int read(){ int x=0,f=1;char ch=getchar(); while(ch<'0'||ch>'9'){if(ch=='-')f=-1;ch=getchar();} while(ch>='0'&&ch<='9') x=x*10+ch-'0',ch=getchar(); return x*f;}int n,m,K,fa[N],size[N],k[N],ans=inf,sum;struct data{ int x,y,f;}a[M];inline bool cmp(data x,data y){return x.f<y.f;}inline int find(int x){return x==fa[x]?x:fa[x]=find(fa[x]);}inline void merge(int x,int y){ int xx=find(x),yy=find(y); if(xx==yy) return; sum-=k[size[xx]]+k[size[yy]]; fa[yy]=xx;size[xx]+=size[yy]; sum+=k[size[xx]];}int main(){// freopen("a.in","r",stdin); n=read();m=read();K=read(); for(int i=1;i<=n;++i) k[i]=read(); for(int i=1;i<=m;++i) a[i].x=read(),a[i].y=read(),a[i].f=read(); std::sort(a+1,a+m+1,cmp); for(int i=1;i<=m;++i){//枚举左端点的频率 if(a[i].f==a[i-1].f) continue; for(int ii=1;ii<=n;++ii) fa[ii]=ii,size[ii]=1;sum=n*k[1]; for(int j=i;j<=m;++j){//枚举右端点的频率 if(a[j].f-a[i].f>=ans) break; merge(a[j].x,a[j].y); if(sum>=K){ans=a[j].f-a[i].f;break;} } } if(ans!=inf) printf("%d\n",ans); else puts("T_T"); return 0;}
阅读全文
0 0
- bzoj3454 家族(并查集)
- 家族(并查集)
- 【并查集】家族
- 【并查集】家族
- 家族 并查集
- [并查集]家族
- P1034 家族 (并查集 I)
- (并查集入门)P1034家族
- CodeVS 1073家族(并查集)
- 【vijos P1034】家族(并查集)
- SSL1896家族(并查集)
- 1073 家族(并查集模板)
- 【Vijos 1034】家族(并查集)
- caioj1092: 并查集(模版 家族)
- 1092: 并查集(模版 家族)
- 家族 SSL_1896 (并查集)
- 【并查集】【Rqnoj331】家族
- [WIKIOI1073]家族(并查集)
- BZOJ3672:[Noi2014]购票 (斜率优化DP+二分+(树上CDQ分治/树链剖分))
- OCI接口简介及其在VC++中的应用(上)
- mybatis动态Sql(if-where)和sql片段
- CI框架集成微信APP支付
- 在VMware vSphere Client下使用Linux虚拟机安装CentOS6.4系统
- bzoj3454 家族(并查集)
- Vue 2.0 的建议学习顺序
- MySQL相关的函数
- Gradle's dependency cache may be corrupt解决方案
- LeetCode-10-Regular-Expression-Matching 递归模拟正则表达式
- OCI接口简介及其在VC++中的应用(中)
- javaseday38(邮件全反选删除 调查问卷 测试)
- 后代选择器和子代选择器的区别
- YJgo 文章