考慮這樣一種暴力:將所有<=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. Django框架之Ajax和form组件

    一.Django框架之查漏补缺 1)models,字段概况 name = models.CharField(max_length=) age = models.IntegerField() price ...

  2. 移动端Android软键盘遮住输入框解决!

    在使用vue的情况下,在输入框中添加 <textarea class="textarea" @click="isAndroid" :maxlength=& ...

  3. ant Design和ant Design mobile的使用,并实现按需加载

    1.全局安装yarn npm install -g create-react-app yarn 2.创建react项目,并用yarn start 运行 3.引入antd/引入antd-mobile y ...

  4. boost-断言

    标准assert宏的原型声明在<assert.h>中,其作用是如果它的测试条件为假,则调用abort()终止程序执行,程序退出的时候会弹出一个错误提示框,并向控制台输出所在文件及行号.as ...

  5. yyparse() and yylex()

    Yacc 与 Lex 快速入门 yyparse() returns a value of 0 if the input it parses is valid according to the give ...

  6. HttpFilter

    import java.io.IOException; import javax.servlet.Filter; import javax.servlet.FilterChain; import ja ...

  7. 一些js在线引用文档

    1.jquery在线引用: <script src="https://code.jquery.com/jquery-3.1.1.min.js"></script& ...

  8. 源项目 -> fork -> 本地 (如何把源项目的代码合并到本地然后推送给fork)

    git remote -v git remote add 别名 地址 git fetch 别名 git merge  别名/分支 第一步:命令行进入到本地.git 所在的目录,查看remote 信息 ...

  9. Latex中图表位置的控制

    \begin{figure}[!htbp] 其中htbp是可选的,它们分别代表 !-忽略“美学”标准 h-here t-top b-bottom p-page-of-its-own

  10. java基础-day11

    第11天 综合练习 今日内容介绍 u 综合练习 第1章   综合练习 1.1      综合练习一 A:键盘录入3个学生信息(学号,姓名,年龄,居住地)存入集合,要求学生信息的学号不能重复 B:遍历集 ...