考慮這樣一種暴力:將所有<=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的更多相关文章

随机推荐

  1. Python常见错误:IndexError: list index out of range

    用python写脚本查询字典时,在遍历字典时循环到某一项时老是报错   出现这种错误有两种情况: 第1种可能情况 list[index]index超出范围 第2种可能情况 list是空值就会出现 In ...

  2. mysql 5.7 linux环境下解压安装

    在CentOS linux环境安装mysql 一般rpm(或者yum),预编译和源码安装. 如果采用rpm或者yum安装,mysql的数据文件一般存放在/var/lib/mysql目录下,也就是会把d ...

  3. 纯css实现蒙层loading效果

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  4. Winform自定义表单(转)

    出处:http://www.newlifex.com/showtopic-167.aspx 好吧,附件真的损坏了,原始代码我也没有了,再提取我也没精力了,不好意思,哪位之前下过可以重发一遍吗?不过即使 ...

  5. 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 保存,退 ...

  6. ext中对json数据的处理解析

    看贴:http://blog.csdn.net/xieshengjun2009/article/details/5959687

  7. Linux下通过管道杀死所有与tomcat相关的进程

    先将正确的命令放上来: ps -ef | grep ps -ef将系统中运行的进程展示出来 选择带有tomcat的进程后同时去除自身带有grep的进程,毕竟本身运行的这条命令是与tomcat相关的 a ...

  8. linux程序员的proc文件系统

    1) 设置core文件存放路径和文件名模式: 设置/proc/sys/kernel/core_pattern,如: echo "core" > /proc/sys/kerne ...

  9. 线程之threading

    多任务:操作系统同时运行多个任务 线程:一个程序运行起来之后一定有一个执行代码的东西,该东西即为线程 线程是操作系统调度执行的最小单位   * 并发:指的是任务数多余cpu核数,通过操作系统的各种任务 ...

  10. 10.DataGrid的特性