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的更多相关文章
随机推荐
- Python常见错误:IndexError: list index out of range
用python写脚本查询字典时,在遍历字典时循环到某一项时老是报错 出现这种错误有两种情况: 第1种可能情况 list[index]index超出范围 第2种可能情况 list是空值就会出现 In ...
- mysql 5.7 linux环境下解压安装
在CentOS linux环境安装mysql 一般rpm(或者yum),预编译和源码安装. 如果采用rpm或者yum安装,mysql的数据文件一般存放在/var/lib/mysql目录下,也就是会把d ...
- 纯css实现蒙层loading效果
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- Winform自定义表单(转)
出处:http://www.newlifex.com/showtopic-167.aspx 好吧,附件真的损坏了,原始代码我也没有了,再提取我也没精力了,不好意思,哪位之前下过可以重发一遍吗?不过即使 ...
- mysql (_mysql_exceptions.OperationalError) (1055, "Expression #1 of SELECT list is not in GROUP BY clause
sudo gedit /etc/mysql/my.cnf在打开的my.cnf文件中添加 sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES 保存,退 ...
- ext中对json数据的处理解析
看贴:http://blog.csdn.net/xieshengjun2009/article/details/5959687
- Linux下通过管道杀死所有与tomcat相关的进程
先将正确的命令放上来: ps -ef | grep ps -ef将系统中运行的进程展示出来 选择带有tomcat的进程后同时去除自身带有grep的进程,毕竟本身运行的这条命令是与tomcat相关的 a ...
- linux程序员的proc文件系统
1) 设置core文件存放路径和文件名模式: 设置/proc/sys/kernel/core_pattern,如: echo "core" > /proc/sys/kerne ...
- 线程之threading
多任务:操作系统同时运行多个任务 线程:一个程序运行起来之后一定有一个执行代码的东西,该东西即为线程 线程是操作系统调度执行的最小单位 * 并发:指的是任务数多余cpu核数,通过操作系统的各种任务 ...
- 10.DataGrid的特性