hdu3938 Portal

Problem Description

ZLGG found a magic theory that the bigger banana the bigger banana peel .This important theory can help him make a portal in our universal. Unfortunately, making a pair of portals will cost min{T} energies. T in a path between point V and point U is the length
of the longest edge in the path. There may be lots of paths between two points. Now ZLGG owned L energies and he want to know how many kind of path he could make.

Input

There are multiple test cases. The first line of input contains three integer N, M and Q (1 < N ≤ 10,000, 0 < M ≤ 50,000, 0 < Q ≤ 10,000). N is the number of points, M is the number of edges and Q is the number of queries. Each of the next M lines contains
three integers a, b, and c (1 ≤ a, b ≤ N, 0 ≤ c ≤ 10^8) describing an edge connecting the point a and b with cost c. Each of the following Q lines contain a single integer L (0 ≤ L ≤ 10^8).

Output

Output the answer to each query on a separate line.

Sample Input

10 10 10
7 2 1
6 8 3
4 5 8
5 8 2
2 8 9
6 4 5
2 1 5
8 10 5
7 3 7
7 8 8
10
6
1
5
9
1
8
2
7
6

Sample Output

36
13
1
13
36
1
36
2
16

13

题目要求a、b两点之间所有的路径中的最大边的最小值。

这题可以用并查集做,因为询问次数很多,所以要离线操作。设数组num[i],只记录i所在集合的总顶点数(一开始以为是记录边的,其实是记录顶点的),先对所有的边排序,从小到大,(其实可以看做是依次枚举最大边的最小值,因为如果这条线段的两端点不在一个集合,即两个集合的边不相连,那么这条线段就起到了桥梁的作用,也就是说任意两个集合的点相连都要通过这条边,因为之前两个集合的最大边的最小值都符合条件,那么如果这条线段也符合条件,就可以把两个集合的点都连起来),因为能量大的值一定包括能量小的路径,所以每次初始化的时候p[i].sum=p[i-1].sum;
#include<iostream>
#include<stdio.h>
#include<string.h>
#include<math.h>
#include<algorithm>
#include<map>
#include<string>
using namespace std;
int pre[10006],num[10006];
struct edge
{
	int from,to,len;
}e[50006];
struct node
{
	int id,num,sum;
}q[10006];

bool cmp1(edge a,edge b)
{
	int temp;
	if(a.len>b.len){
		temp=a.from;a.from=b.from;b.from=temp;
		temp=a.to;a.to=b.to;b.to=temp;
		return a.len<b.len;
	}
	return a.len<b.len;
}
bool cmp2(node a,node b)
{
	int temp;
	if(a.num>b.num){
		temp=a.id;a.id=b.id;b.id=temp;
		return a.num<b.num;
	}
	return a.num<b.num;
}
bool cmp3(node a,node b)
{
	int temp;
	if(a.id>b.id){
		temp=a.sum;a.sum=b.sum;b.sum=temp;
		return a.id<b.id;
	}
	return a.id<b.id;
}
int find(int x)
{
	int r=x,i,j=x;
	while(r!=pre[r])r=pre[r];
	while(j!=pre[j]){
		i=pre[j];
		pre[j]=r;
		j=i;
	}
	return r;
}

int main()
{
	int n,m,i,j,a,b,c,p,t1,t2,ans;
	while(scanf("%d%d%d",&n,&m,&p)!=EOF)
	{
		for(i=0;i<=n;i++){
			pre[i]=i;num[i]=1;
		}
		for(i=1;i<=m;i++){
			scanf("%d%d%d",&e[i].from,&e[i].to,&e[i].len);
		}
		sort(e+1,e+1+m,cmp1);
		for(i=1;i<=p;i++){
			scanf("%d",&q[i].num);
			q[i].id=i;
		}
		sort(q+1,q+p+1,cmp2);
		ans=1;
		q[0].sum=0;
		for(i=1;i<=p;i++){
			q[i].sum=q[i-1].sum;
			while(ans<=m && e[ans].len<=q[i].num){
			     t1=find(e[ans].from);t2=find(e[ans].to);
			     if(t1==t2){
     				ans++;continue;
     			 }
			     pre[t1]=t2;
			     q[i].sum+=num[t1]*num[t2];
			     num[t2]+=num[t1];
			     ans++;
			}
		}

		sort(q+1,q+1+p,cmp3);
		for(i=1;i<=p;i++){
			printf("%d\n",q[i].sum);
		}
	}
	return 0;
}

时间: 2024-11-12 02:07:32

hdu3938 Portal的相关文章

hdu3938 Portal 离线的并查集

离线算法是将全部输入都读入,计算出所有的答案以后再输出的方法.主要是为避免重复计算.类似于计算斐波那契数列的时候用打表的方法. 题目:给一个无向图,求有多少个点对,使得两点间的路径上的花费小于L,这里路径上的花费是这样规定的,a.b两点之间所有的路径中的最大边的最小值.    当然题目上不是这么写的.它问的是有多少种路径,这里就比较模糊了,到底两个路径怎样才算是两种路径呢,这时候重新看题,可以发现,如果理解为路径中经过的点不同的话,题目中给的所谓两点间的花费这个定义就没有意义了,所以就可以猜测,

HDU3938 Portal (并查集经典+最小生成树)

本题从题目给出的条件我们发现了最小生成树的影子,也就是kruscal的影子 其实我们在写kruscal的时候就是利用并查集的思想来写的 这题需要注意的是,我们在求取的过程中l并不需要减少,我们只要最小生成树中的最大边权小于等于l就行了 这就让我们想到了可以从小到大对边权排序,之后枚举维护树集合,如果两个点还不在同一颗树中那就合并 那么答案就是求取的路径的个数,我们知道每个边对路径的个数的贡献就是左边节点?右边节点,根据乘法原理可得. 本题还需要注意的是,询问的个数很多,如果在线查询,每次从头开始

部署FIM 2010 R2&mdash;3安装FIM 2010 R2 Service and Portal

部署FIM 2010 R2-3安装FIM 2010 R2 Service and Portal 1.打开FIMSplash文件,如下图, 选择"Install Service and Portal", 2.选择"下一步", 选择"下一步", 选择"下一步", 3.选择要安装的角色,这里我们全部安装, 4.为FIM服务器指定SQL 2008数据库服务器名称以及FIM数据库名称,这里使用本地数据库服务,数据库名称使用默认名称, 5

HoloLens开发手记 - 使用Windows设备控制台 Using Windows Device Portal

Windows设备控制台允许你通过Wi-Fi或USB来远程控制你的HoloLens设备.设备控制台是HoloLens上的一个Web Server,你可以通过PC的浏览器来连接到它.设备控制台包含了很多帮助你管理.调试和优化HoloLens设备的工具. 设置HoloLens以使用Windows设备控制台 Setting up HoloLens to use Windows Device Portal 打开HoloLens,并穿戴上 使用绽开手势打开开始菜单 选中设置应用,在你放置它以后会自动启动

【产品使用】运维监控工具-PIGOSS BSM的个性化Portal设置

运维监控工具--PIGOSS BSM用户操作界面友好.直观.快捷.易操作:支持全中文Web界面:支持https协议:无需安装任何额外客户端: 登录首页基于Portal展现,可以自行设定Portal首页内容和形式.不同管理员登录后可以依据自己的现阶段监控关注点,对于首页模块窗口的内容.位置.大小都可随时调整. 首页Portal应支持自行设置重点关注窗口. 运维监控工具PIGOSS BSM对于首页的显示模块.显示位置.显示内容都能完全自定义,如下图 如何设置? 一.进入系统,选择"系统管理"

CMCC portal 协议wireshark 抓包分析

环境介绍: 认证服务器 192.168.13.253 AC 192.168.13.252 抓包过程:1.安装wireshark,宁盾wifi默认安装路径下${DKEY AM }/Utilities目录下有wireshark安装包,直接安装即可,具体安装过程略.2.添加Portal协议分析插件,具体操作过程参见附件  portal协议分析插件.zip (114.59 KB, 下载次数: 894) 3.运行wireshark选取网卡,例我的认证服务器所使用的网卡为本地链接;如图: 4.过滤porta

itop 各图标的超链接 ,portal 与 主界面 切换按钮

首页                 'app_icon_url' => array(                         'type' => 'string',                         'description' => 'Hyperlink to redirect the user when clicking on the application icon (in the main window, or login/logoff pages)',  

Office365 New Admin Portal Preview

今天登录office365全球版测试账号,发现管理中心界面有了变化,出了Admin center preview.和原来都不太一样了,跟global接轨.还蛮不错的.喜欢~~ 增加了新功能,客户可以直接在portal上看到我们每个月的更新. 但是我们世纪互联的版本(数据中心在北京和上海)没有更新,维持老的界面.呵呵.

wiwiz认证实现无线portal认证

Wiwiz(全称Wiwiz HotSpot Builder)是一个有线/无线网络热点管理系统,利用它你可以为你的热点创建一个强制门户/强制认证页面(captive portal).Wiwiz HotSpot Builder由两部分构成– Wiwiz Web控制面板和一个叫做Wiwiz HotSpot Builder Utility的客户端.典型的应用情景是,部署了Wiwiz HotSpotBuilder的机器充当无线(或有线)局域网中的Internet网关.当网络中的一个用户试图使用Intern