Travel

Time Limit:1000MS     Memory Limit:131072KB     64bit IO Format:%I64d & %I64u

/*
题意
给出n【节点数】,m【连线数】,q【查询次数】;
输入m组数据 u【起点】,v【终点】,cost【权值】; (u,v)和 (v,u)表示两种不同的连线
输入q组查询数据; 要求
输出在m组数据中所有cost<q的所有节点连线的连线方式个数。 注意:每个拥有n个节点的联通块有 n*(n-1)个联通分量 (连线数);
每次两个联通块相连总连线数应该是(n1+n2)*(n1+n2-1);
用一个数据来记录的话更新方式应该为 n-n1*(n1-1)-n2*(n2-1)+(n1+n2)*(n1+n2-1);
*/ //如果每一次都重新建立并查集,查询数q比较大的话肯定会超时的,看了别人博客说用离线思维;稍稍了解了一下啥叫离线思维。 //本题用离线思想,将查询按照X的大小升序排序,后面的查询就在前一步往后进行,复杂度减小很多

/*
神测试数据。。。。。【 T。T 】
1
5 5 12
2 3 6334
1 5 15724
3 5 5705
4 3 12382
1 3 21726
6333
6334
6335
12345
12381
12385
13000
233
5777
21726
21727
21725

*/

//AC代码:
#include"iostream"
#include"cstdio"
#include"cstring"
#include"cmath"
#include"algorithm"
using namespace std;
const int MX=2222222;
long long ans[MX];
int P[MX], num[MX]; struct node {
int u, v, cost;
} side[MX]; bool cmp_side(node a,node b) {
return a.cost < b.cost;
} struct Que {
int id, x; //id 记录输入时候的顺序 x记录查询值
} Q[MX]; bool cmp_que(Que a,Que b) {
return a.x<b.x;
} int find(int x) {
return P[x]==x?x:(P[x]=find(P[x]));
} int main() {
int T;
scanf("%d", &T);
while(T--) {
int n, m, q;
scanf("%d%d%d", &n, &m, &q);
for(int i=1; i<=n; i++) {
P[i]=i;
num[i]=1; //初始化连通分量
}
for(int i=1; i<=m; i++) { //把无向边加入队列
scanf("%d%d%d", &side[i].u, &side[i].v, &side[i].cost);
}
sort(side+1,side+m+1,cmp_side);//升序排序无向边
for(int i=1; i<=q; i++) { //添加查询队列
Q[i].id=i;
scanf("%d",&Q[i].x);
}
sort(Q+1,Q+q+1,cmp_que); //按照查询复杂度排序答案。
int k=1;
long long s=0;
for(int i=1; i<=m; i++) {
while(k<=q&&side[i].cost>Q[k].x)ans[Q[k++].id]=s; //把答案按照ID的顺序保存到ans数组中
int rt1=find(side[i].u),rt2=find(side[i].v);
if(rt1!=rt2) {
long long n1=num[rt1],n2=num[rt2];
//每个拥有n个节点的联通块有 n*(n-1)个联通分量 (对点)
s=s-n1*(n1-1)-n2 *(n2-1)+(n1+n2)*(n1+n2-1);//去掉两个根的联通量在加上总和的联通分量
P[rt1]=rt2;
num[rt2]+=num[rt1];//加上节点的数量
}
}
//ans[Q[k].id]=s; // 【这里居然看在上面读入ans之后还没有到最后一个,后面再测试数据才发现了这个问题。。。】
while(k<=q)
ans[Q[k++].id]=s;
for(int i=1; i<=q; i++)
printf("%I64d\n",ans[i]); //按照离线保存的实际查询顺序输出
}
return 0;
}

  

 

ACM : Travel-并查集-最小生成树 + 离线-解题报告的更多相关文章

  1. ACM数据结构-并查集

    ACM数据结构-并查集   并查集,在一些有N个元素的集合应用问题中,我们通常是在开始时让每个元素构成一个单元素的集合,然后按一定顺序将属于同一组的元素所在的集合合并,其间要反复查找一个元素在哪个集合 ...

  2. 并查集 & 最小生成树详细讲解

    并查集 & 最小生成树 并查集 Disjoint Sets 什么是并查集?     并查集,在一些有N个元素的集合应用问题中,我们通常是在开始时让每个元素构成一个单元素的集合,然后按一定顺序将 ...

  3. ACM: 继续畅通工程-并查集-最小生成树-解题报告

    继续畅通工程 Time Limit:1000MS Memory Limit:32768KB 64bit IO Format:%I64d & %I64u Submit Status Descri ...

  4. ACM: The Suspects-并查集-解题报告

    The Suspects Time Limit:1000MS Memory Limit:20000KB 64bit IO Format:%lld & %llu Description 严重急性 ...

  5. hdu 1863 畅通工程 (并查集+最小生成树)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1863 畅通工程 Time Limit: 1000/1000 MS (Java/Others)    M ...

  6. CodeForces892E 可撤销并查集/最小生成树

    http://codeforces.com/problemset/problem/892/E 题意:给出一个 n 个点 m 条边的无向图,每条边有边权,共 Q 次询问,每次给出 ki​ 条边,问这些边 ...

  7. CodeForces - 891C: Envy(可撤销的并查集&最小生成树)

    For a connected undirected weighted graph G, MST (minimum spanning tree) is a subgraph of G that con ...

  8. Travel 并查集

    题意:给一个图,若干询问,每次询问只经过边权<=w的边,x能到达的点数 并查集啊,对询问和边排序,直接合并,维护size,查询 #include<cstdio> #include&l ...

  9. acm专题--并查集

    题目来源:http://hihocoder.com/problemset/problem/1066 #1066 : 无间道之并查集 时间限制:20000ms 单点时限:1000ms 内存限制:256M ...

随机推荐

  1. mysql可以用这种方式<<! 输入内容 ! 做成脚本

    以这种文件式做交接NB!!!!! [root@NB test]# mysql -uroot -p$passwd <<! > use mysql > select user,ho ...

  2. XAML语言介绍

    <Window x:Class="WpfApplication1.Window1" xmlns="http://schemas.microsoft.com/winf ...

  3. SQL——触发器——插入触发器——边学边项目写的。

    需求: 项目表项目编码触发器编写 为项目表DwProject编写触发器,目的为当创建新项目时,且ProjectNo 为Null或空字符串时,自动创建项目编号,编号格式为4位年号,2位月份,2位顺序号, ...

  4. Jmeter在restful风格接口测试中的应用

    1.如何下载安装 官网下载,一个压缩包apache-jmeter-3.0.zip,解压即可,打开bin目录下jmeter.bat即可打开软件. 2.熟悉界面 3.实际案例 测试restful风格接口 ...

  5. LightOJ 1030 Discovering Gold(期望 概率)

    正推,到达i的概率为p[i],要注意除了1和n外,到达i的概率并不一定为1 概率表达式为p[i] += p[j] / min(n - j, 6) 从j带过来的期望为exp[i] += exp[j] / ...

  6. Win10 兼容性 Visual studio web应用程序 ASP.NET 4.0 尚未在 Web 服务器上注册

    系统升级到windows10 ,Visual studio 创建web应用程序时出现如下提示ASP.NET 4.0尚未在 Web 服务器上注册.为了使网站正确运行,可能需要手动将 Web 服务器配置为 ...

  7. 杂物 git rebase

  8. html5 web database

    html5 web database <!DOCTYPE html> <html lang="en"> <head> <meta char ...

  9. Java Data Type

    官方文档:http://docs.oracle.com/javase/tutorial/java/nutsandbolts/datatypes.html 转载地址:http://blog.csdn.n ...

  10. 智能车学习(一)—— 硬件准备

    一.硬件环境准备 1.烧写器焊接 (1)原理图: (2)焊接成品图 2.电源模块: 3.屏幕+键盘 4.单片机 二.软件环境准备 1.安装air6.7 2.安装JLINK驱动 3.安装软件包寄存在GI ...