description

阿狸和桃子养了n 个小阿狸, 小阿狸们每天都在一起玩的很开心. 作为工程师的阿狸在对小阿狸们之间的关系进行研究以后发现了小阿狸的人际关系由某种神奇的相互作用决定, 阿狸称之为“键”. 每个键有一个频率, 称为键频率, 是一个整数(单位Hz)。

由于小阿狸们每天成集团地黏在一起, 桃子希望他们能够分成更加独立的几团. 阿狸发现, 一旦小阿狸们分开, 独立的一块连在一起的几个小阿狸就会形成一个家族, 而家族的类型由这个家族的小阿狸的数量唯一确定(比如说只有一个小阿狸的家族显然就是单身码农, 两个小阿狸的显然是一对小阿狸恋人, 三个小阿狸的就是三口之家等等). 显然, 一个小阿狸和另一个小阿狸处于同一家族,当且仅当两个小阿狸之间存在直接或间接的键组成的路径.。

桃子对每种小阿狸家族都有自己的喜好程度, 她希望所有的小阿狸家族喜好程度之和大于等于K。

为了让小阿狸们分开来, 阿狸决定让某些键断裂, 只保留某一段频率的键,比如说100Hz 到140Hz 频率的键, 这时频段宽度为40Hz. 当然, 阿狸希望频段宽度越小越好, 但至少要有一个小键. 你的任务就是求出最小的频段宽度.

注意, 输入不保证全部键都有效时只有一个小阿狸家族。


analysis

  • 并查集傻逼题

  • \(m\)才\(5k\),排一下序,然后\(O(m^2)\)暴力枚举

  • 用并查集维护每个点的集合大小,只要权值和大于等于\(k\)就记录答案退出

  • 每次合并两个集合先减去各自原先的权值,再加上并起来后的集合权值大小就好


code

#include<stdio.h>
#include<string.h>
#include<algorithm>
#define MAXN 1005
#define MAXM 5005
#define INF 1000000007
#define ll long long
#define fo(i,a,b) for (ll i=a;i<=b;++i)
#define fd(i,a,b) for (ll i=a;i>=b;--i) using namespace std; ll val[MAXN],fa[MAXN],size[MAXN];
ll n,m,k,ans=INF; struct edge
{
ll x,y,z;
}a[MAXM]; inline ll read()
{
ll x=0,f=1;char ch=getchar();
while (ch<'0' || '9'<ch){if (ch=='-')f=-1;ch=getchar();}
while ('0'<=ch && ch<='9')x=x*10+ch-'0',ch=getchar();
return x*f;
}
inline bool cmp(edge a,edge b)
{
return a.z<b.z;
}
inline ll getfa(ll x)
{
return fa[x]==x?x:fa[x]=getfa(fa[fa[fa[fa[fa[x]]]]]);
}
int main()
{
//freopen("T1.in","r",stdin);
n=read(),m=read(),k=read();
fo(i,1,n)val[i]=read();
fo(i,1,m)a[i].x=read(),a[i].y=read(),a[i].z=read();
sort(a+1,a+m+1,cmp);
fo(i,1,m)
{
fo(j,1,n)fa[j]=j,size[j]=1;
ll tot=n*val[1];
fo(j,i,m)
{
ll x=getfa(a[j].x),y=getfa(a[j].y);
if (x!=y)
{
fa[y]=x;
tot-=val[size[x]]+val[size[y]];
size[x]+=size[y],size[y]=0;
tot+=val[size[x]];
}
if (tot>=k)
{
ans=min(ans,a[j].z-a[i].z);
break;
}
}
}
if (ans==INF)printf("T_T\n");
else printf("%lld\n",ans);
return 0;
}

最新文章

  1. 8.Java格式化输出
  2. 安装Fedora 24后必要的设置
  3. 登录phpmyadmin提示: #1045 无法登录 MySQL 服务器
  4. [读书笔记] Head First 设计模式
  5. 如何退出调起多个Activity的Application?
  6. Swift入门篇-集合
  7. Datatable分页
  8. 作业6 分析项目的NABCD和项目的产品Backlog
  9. class 类(1)
  10. VBS脚本操作网页元素
  11. 2018-01-19 Xtext试用: 快速实现简单领域专用语言(DSL)
  12. 《DSP using MATLAB》Problem 6.16
  13. 在html中用js代替${pagecontext.request.getcontextpath}这样就不用使用jsp了
  14. Linux内核分析第三周学习笔记
  15. 如何查看当前项目Laya的引擎版本
  16. Vue引用其他组件,但组件某些部分不需要时的简单处理
  17. 学习OpenCV——SVM
  18. java 在控制台上输入密码时,密码不显示在控制台上
  19. RT-thread内核之内核对象模型
  20. 21天学通C++学习笔记(一):入门

热门文章

  1. Java-Class-C:com.alibaba.fastjosn.JSON
  2. LeetCode 852. Peak Index in a Mountain Array (山脉数组的峰顶索引)
  3. Git仓库操作命令
  4. identityserver4 对接钉钉
  5. Number浮点数运算详解
  6. 2018-12-25-C#-7.2-通过-in-和-readonly-struct-减少方法值复制提高性能
  7. Linux-iptables-route-rule
  8. GetOpenFilename的基本用法(文件夹实操)
  9. CF774L Bars
  10. IDEA快捷键(收集自网络后整理)