jzoj4223
考慮這樣一種暴力:將所有<=x的邊按照類似最小生成樹的方式加入答案,然後用下面的方法統計答案:
1.首先加入一條邊
2.看這條邊是否將會合成聯通塊,如果會,那麼加進這條邊,記這條邊一端聯通塊大小為x,另一端為y,則對答案貢獻為(x+y)2−x2−y2(x+y)^2-x^2-y^2(x+y)2−x2−y2
但是這樣太慢,需要優化
不過我們發現:題目沒有要求在線,於是我們可以離線,將詢問按照x值從小到大排序,插進邊裡,這樣我們可以利用以前做過的結果不用重新再做一遍,減少了冗餘運算
#include<bits/stdc++.h>
using namespace std;
struct no{
int a,b,c,t,d;
bool operator <(const no &rhs)const{
return c<rhs.c||c==rhs.c&&t<rhs.t;
}
}e[500010];
int f[500010],ans,s[500010],n,m,q,ct,r[500010];
int fd(int x){return f[x]==x?x:f[x]=fd(f[x]);}
int main(){
int t;
scanf("%d",&t);
while(t--){
scanf("%d%d%d",&n,&m,&q);
memset(e,0,sizeof(e));
for(int i=1;i<=n;i++){
f[i]=i;
s[i]=1;
}
ct=0;ans=0;
while(m--){
ct++;
scanf("%d%d%d",&e[ct].a,&e[ct].b,&e[ct].c);
e[ct].t=0;
}
for(int i=1;i<=q;i++){
ct++;
scanf("%d",&e[ct].c);
e[ct].t=1;
e[ct].d=i;
}
int p=1,w=0;
sort(e+1,e+ct+1);
while(w!=q){
while(p<=ct&&!e[p].t){
int xx=fd(e[p].a),yy=fd(e[p].b);
p++;
if(xx!=yy){
f[xx]=yy;
ans-=s[yy]*s[yy];
ans-=s[xx]*s[xx];
s[yy]+=s[xx];
ans+=s[yy]*s[yy];
}
}
w++;
r[e[p].d]=ans;
p++;
}
for(int i=1;i<=q;i++)
printf("%d\n",r[i]);
}
}
jzoj4223的更多相关文章
随机推荐
- Sharing Code Between Silverlight and Win8 app metro
这里讲得很详细了: Sharing Code between Windows Phone 8 and Windows 8 Applications http://msdn.microsoft.com/ ...
- 日志分析工具、日志管理系统、syslog分析
日志分析工具.日志管理系统.syslog分析 系统日志(Syslog)管理是几乎所有企业的重要需求.系统管理员将syslog看作是解决网络上系统日志支持的系统和设备性能问题的关键资源.人们往往低估了对 ...
- Python之异常处理和socket套接字连接7
一.异常处理 1)异常处理的使用意义 什么是异常处理 异常是程序发生错误的信号,即程序一旦出错就会立刻产生一个异常,如果该异常没有被处理 那么异常就抛出来,程序的运行也随之终止 异常分为三部分: 异常 ...
- 用模糊查询like语句时如果要查是否包含%字符串该如何写
- 2018.12.18 bzoj5296: [Cqoi2018]破解D-H协议(bsgs)
传送门 bsgsbsgsbsgs基础题. 考虑到给的是原根,因此没无解的情况. 于是只需要每次把a,ba,ba,b解出来. 然后可以通过预处理节省一部分时间. 代码: #include<bits ...
- MFC单文档带窗体创建
我用的vs05.先随便起个名字qwerty. 确定以后在左边最下面有一个生成的类,点击生成的类,把基类改成CFormView 最后点击完成就创建好了. 单文档的窗口不是后来创建后插入的,是在创建后就自 ...
- EXCEL中R1C1样式引用
主要引用http://club.excelhome.net/thread-759847-1-1.html Sub chengji() ' ' 宏1 宏 ' Dim Finalrow As Intege ...
- 解决Linux下IDEA无法使用ibus输入法的问题和tip乱码
一:可以先按网上的配置/etc/profile里的输入法的一些参数,我是先配置了这些参数的,但是输入法还是没用,后来一直没管它了,今天用了一些方式可以了但不敢保证不需要先配置那些参数: 二:情况:开启 ...
- C++编译器详解(一)
C/C++编译器-cl.exe的命令选项 和在IDE中编译相比,命令行模式编译速度更快,并可以避免被IDE产生的一些附加信息所干扰,本文将介绍微软C/C++编译器命令行模式设定和用法. 1.设置环境变 ...
- [HTML5] 颜色选择器的操作[input type='color'....]
一.点击事件和获取颜色值 <!DOCTYPE html> <html lang="en"> <head> <meta charset=&q ...