Travel

Time Limit: 1500/1000 MS (Java/Others)    Memory Limit: 131072/131072 K (Java/Others)

Total Submission(s): 1852    Accepted Submission(s): 641

Problem Description
Jack likes to travel around the world, but he doesn’t like to wait. Now, he is traveling in the Undirected Kingdom. There aren
cities and m
bidirectional roads connecting the cities. Jack hates waiting too long on the bus, but he can rest at every city. Jack can only stand staying on the bus for a limited time and will go berserk after that. Assuming you know the time it takes to go from one city
to another and that the time Jack can stand staying on a bus is
x
minutes, how many pairs of city (a,b)
are there that Jack can travel from city a
to b
without going berserk?
 
Input
The first line contains one integer
T,T≤5,
which represents the number of test case.



For each test case, the first line consists of three integers
n,m
and q
where n≤20000,m≤100000,q≤5000.
The Undirected Kingdom has n
cities and m
bidirectional roads, and there are q
queries.



Each of the following m
lines consists of three integers a,b
and d
where a,b∈{1,...,n}
and d≤100000.
It takes Jack d
minutes to travel from city a
to city b
and vice versa.



Then q
lines follow. Each of them is a query consisting of an integer
x
where x
is the time limit before Jack goes berserk.


 
Output
You should print q
lines for each test case. Each of them contains one integer as the number of pair of cities(a,b)
which Jack may travel from a
to b
within the time limit x.



Note that (a,b)
and (b,a)
are counted as different pairs and a
and b
must be different cities.
 
Sample Input
1
5 5 3
2 3 6334
1 5 15724
3 5 5705
4 3 12382
1 3 21726
6000
10000
13000
 
Sample Output
2
6
12
 
Source
 
Recommend
hujie

通过并查集计算新加入的,每次的计算公式为原来的s+合并后的两个集合数量乘积。。。

#pragma comment(linker, "/STACK:1024000000,1024000000")
#include <iostream>
#include <stdio.h>
#include <math.h>
#include <string>
#include <queue>
#include <string.h>
#include <map>
#include <set>
#include <vector>
#include <algorithm>
#include <stdlib.h>
using namespace std;
#define eps 1e-8
#define INF 20000000005
#define rd(x) scanf("%d",&x)
#define rd2(x,y) scanf("%d%d",&x,&y)
#define rd3(x,y,z) scanf("%d%d%d",&x,&y,&z);
#define rdLL(x) scanf("%I64d",&x)
#define MAXn 20005
#define MAXe 100005
#define QUEnum 5005
struct Node{
int sta,end,val;
}node[MAXe]; struct Que{
int queval , num;
}que[QUEnum]; int sett[MAXn]; int sett_find(int x)
{
if(sett[x]<0) return x;
return sett[x]=sett_find(sett[x]);
} bool cmp1(Node a,Node b){
return a.val<b.val;
} bool cmp2(Que a,Que b){
return a.queval<b.queval;
}
int main ()
{
int Case;
rd(Case);
while(Case--)
{
memset(sett,-1,sizeof(sett));
int sum[MAXn];
int res[QUEnum];
for(int i=0;i<MAXn;i++) sum[i]=1;
int n,e,quenum;
rd3(n,e,quenum); for(int i=0;i<e;i++)
rd3(node[i].sta,node[i].end,node[i].val); sort(node,node+e,cmp1); ///这里的排序不是+n 而是e 找了两个小时
for(int i=0;i<quenum;i++) {
rd(que[i].queval);
que[i].num=i;
} sort(que,que+quenum,cmp2);
int j=0,s=0; ///计数有多少能到达
for(int i=0 ; i<quenum ;i++) ///不能在这里添加j<e,因为大于的还需要计算
{
while( j<e && node[j].val <= que[i].queval ){
int a=node[j].sta,b=node[j].end; int p = sett_find(a);
int q = sett_find(b);
if(p!=q){
s += (sum[q]*sum[p]); ////((sum[q]*(sum[q]+1))>>1) - ((sum[p]*(sum[p]+1))>>1) +
sett[q] = p;
sum[p]=sum[q]+sum[p]; ///p作为根节点
}
j++;
}
res[ que[i].num ] = (s<<1);
}
for(int i=0;i<quenum;i++)
printf("%d\n",res[i]);
}
return 0;
}

Regional Changchun Online--Travel(最小生成树&& 并查集)的更多相关文章

  1. UVA 1395 苗条的生成树(最小生成树+并查集)

    苗条的生成树 紫书P358 这题最后坑了我20分钟,怎么想都对了啊,为什么就wa了呢,最后才发现,是并查集的编号搞错了. 题目编号从1开始,我并查集编号从0开始 = = 图论这种题真的要记住啊!!题目 ...

  2. CSP 201703-4 地铁修建【最小生成树+并查集】

    问题描述 试题编号: 201703-4 试题名称: 地铁修建 时间限制: 1.0s 内存限制: 256.0MB 问题描述: 问题描述 A市有n个交通枢纽,其中1号和n号非常重要,为了加强运输能力,A市 ...

  3. HDU 5441——Travel——————【并查集+二分查界限】

    Travel Time Limit: 1500/1000 MS (Java/Others)    Memory Limit: 131072/131072 K (Java/Others)Total Su ...

  4. 【BZOJ-1576】安全路径Travel Dijkstra + 并查集

    1576: [Usaco2009 Jan]安全路经Travel Time Limit: 10 Sec  Memory Limit: 64 MBSubmit: 1044  Solved: 363[Sub ...

  5. 关于最小生成树(并查集)prime和kruskal

    适合对并查集有一定理解的人.  新手可能看不懂吧.... 并查集简单点说就是将相关的2个数字联系起来 比如 房子                      1   2    3   4  5   6 ...

  6. 【BZOJ4144】[AMPPZ2014]Petrol(最短路+最小生成树+并查集)

    Description 给定一个n个点.m条边的带权无向图,其中有s个点是加油站. 每辆车都有一个油量上限b,即每次行走距离不能超过b,但在加油站可以补满. q次询问,每次给出x,y,b,表示出发点是 ...

  7. bzoj 3559: [Ctsc2014]图的分割【最小生成树+并查集】

    读题两小时系列-- 在读懂题意之后,发现M(c)就是c这块最大权割边也就是的最小生成树的最大权边的权值,所以整个问题都可以在MST的过程中解决(M和c都是跟着并查集变的) 不过不是真的最小生成树,是合 ...

  8. HDU5441 Travel 离线并查集

    Travel Problem Description Jack likes to travel around the world, but he doesn’t like to wait. Now, ...

  9. HDU 5441 Travel (并查集+数学+计数)

    题意:给你一个带权的无向图,然后q(q≤5000)次询问,问有多少对城市(城市对(u,v)与(v,u)算不同的城市对,而且u≠v)之间的边的长度不超过d(如果城市u到城市v途经城市w, 那么需要城市u ...

随机推荐

  1. maven项目依赖小试牛刀

    1.先建立空的wbh-parent,留下pom.xml;将项目中用的jar包依赖全放进去: 2.建立core项目,当然全是maven的,这个建好后,是用来让其他项目引用的,所以必须用maven ins ...

  2. HBase(七): HBase体系结构剖析(下)

    目录: write Compaction splite read Write: 当客户端发起一个Put请求时,首先根据RowKey寻址,从hbase:meta表中查出该Put数据最终需要去的HRegi ...

  3. CentOS 6.0最小化编译安装Nginx+MySQL+PHP+Zend

    http://www.osyunwei.com/archives/235.html 引言: 操作系统:CentOS 6.0 32位         下载地址:http://mirrors.163.co ...

  4. C++中的空类与空结构体大小

    今天面试遇到了一个很有意思的问题,即空结构体在C++中所占的内存大小是多少?参见如下代码: #include <iostream> struct S0 { }; int main() { ...

  5. @GeneratedValue - fancychendong的专栏 - 博客频道 - CSDN.NET

    登录|注册 收藏成功 确定 收藏失败,请重新收藏 确定 标题 标题不能为空 网址 标签 摘要 公开 取消收藏 分享资讯 传PPT/文档 提问题 写博客 传资源 创建项目 创建代码片 设置昵称编辑自我介 ...

  6. [Hibernate] - Criteria Select

    使用Hibernate的Criteria做查询. 参考文档: http://docs.jboss.org/hibernate/orm/3.5/reference/zh-CN/html/querycri ...

  7. PHP中使用CURL实现get和post请求(总结)

    一.什么是curl curl是利用url语法在命令行方式下工作的开源文件传输工具. 二.PHP curl函数

  8. 剑指offer系列25---构建乘积数组

    [题目]给定一个数组A[0,1,…,n-1],请构建一个数组B[0,1,…,n-1],其中B中的元素B[i]=A[0]A[1]…A[i-1]A[i+1]…A[n-1].不能使用除法. package ...

  9. (C#).NET 2.0 ~ 4.0 OS requirements.

    .NET 4.0 requires XP SP3, Win2k3 SP2, Vista, 7, or 2008(R2) .NET 3.5 requires XP SP2 or newer. .NET ...

  10. sqlite数据库执行full outer join

    sqlite数据库执行full outer join时提示:RIGHT and FULL OUTER JOINs are not currently supported. sqlite数据库不支持(+ ...