tyvj-1460 旅行
题目描写叙述:
A国有n座城市,每座城市都十分美,这使得A国的民众们很喜欢旅行。
然而,A国的交通十分落后,这里仅仅有m条双向的道路。而且这些道路都十分崎岖,有的甚至还是山路。仅仅能靠步行。通过每条道路的长度、泥泞程度等因素,我们给每条道路评估一个“崎岖度”,表示通过这条道路的不舒适程度。
从X城市经过若干条道路到达Y城市,我们称这次旅行的“代价”为所经过道路“崎岖度”的最大值。当然。假设从X城市到Y城市有多条路线。民众们会自觉选择“代价”最小的路线进行旅行。可是,A国的民众也是有脾气的。假设旅行的“代价”超过了他们的“忍耐度”,他们就不选择这个旅行了。甚至宁愿在家里宅着。
如今A国的国王想进行若干次询问:给定民众的“忍耐度”。问还有多少对城市(X,Y)会存在旅行?请你对国王的每次询问分别给出回答。
n<=100000,m<=200000,Q<=200000。其它数不超过10^9。
题解:
对于随意两点之间来说。起作用的仅仅有崎岖度最小的的那条链上的最长边。
所以考虑维护这种边与图的关系;
对边从小到大排序,然后维护一个连通性的并查集。
那么假设令f[i]为忍耐度为第i小的边时的答案的话;
能够得到转移方程f[i]=f[i-1]-size[x]*(size[x]-1)/2-size[y]*(size[y]-1)/2+(size[x]+size[y])*(size[x]+size[y]-1)/2;
size[x]表示x所在连通块中的点数。
然后为了高速的处理询问。能够做一些预处理;
使边权和f数组下标相相应。这样就能够通过二分边权数组来得到答案;
时间复杂度O(mlogm+Qlogm);
代码:
#include<stdio.h>
#include<string.h>
#include<algorithm>
#define N 110000
using namespace std;
typedef long long ll;
struct node
{
int x,y,val;
}a[N<<1];
int f[N],len[N<<1];
ll ans[N<<1],size[N];
int find(int x)
{
if(f[x]==x)
return x;
f[x]=find(f[x]);
size[f[x]]+=size[x];
size[x]=0;
return f[x];
}
ll mul(ll x)
{
return x*(x-1)/2;
}
int cmp(node a,node b)
{
return a.val<b.val;
}
int main()
{
int n,m,q,i,j,k,x,y,fx,fy;
scanf("%d%d%d",&n,&m,&q);
for(i=1;i<=m;i++)
scanf("%d%d%d",&a[i].x,&a[i].y,&a[i].val);
for(i=1;i<=n;i++)
f[i]=i,size[i]=1;
sort(a+1,a+1+m,cmp);
for(i=1;i<=m;i++)
{
x=a[i].x,y=a[i].y;
len[i]=a[i].val;
fx=find(x),fy=find(y);
if(fx!=fy)
{
ans[i]=ans[i-1]-mul(size[fy])-mul(size[fx])+mul(size[fx]+size[fy]);
f[fx]=fy;
size[fy]+=size[fx];
size[fx]=0;
}
else
ans[i]=ans[i-1];
}
for(i=1;i<=q;i++)
{
scanf("%d",&k);
printf("%lld\n",ans[upper_bound(len+1,len+1+m,k)-len-1]);
}
return 0;
}
tyvj-1460 旅行的更多相关文章
- [BZOJ3223]Tyvj 1729 文艺平衡树
[BZOJ3223]Tyvj 1729 文艺平衡树 试题描述 您需要写一种数据结构(可参考题目标题),来维护一个有序数列,其中需要提供以下操作:翻转一个区间,例如原有序序列是5 4 3 2 1,翻转区 ...
- [BZOJ3224]Tyvj 1728 普通平衡树
[BZOJ3224]Tyvj 1728 普通平衡树 试题描述 您需要写一种数据结构(可参考题目标题),来维护一些数,其中需要提供以下操作:1. 插入x数2. 删除x数(若有多个相同的数,因只删除一个) ...
- BZOJ 3531: [Sdoi2014]旅行 [树链剖分]
3531: [Sdoi2014]旅行 Time Limit: 20 Sec Memory Limit: 512 MBSubmit: 1685 Solved: 751[Submit][Status] ...
- BZOJ3223: Tyvj 1729 文艺平衡树 [splay]
3223: Tyvj 1729 文艺平衡树 Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 3595 Solved: 2029[Submit][Sta ...
- vijos P1780 【NOIP2012】 开车旅行
描述 小\(A\)和小\(B\)决定利用假期外出旅行,他们将想去的城市从\(1\)到\(N\)编号,且编号较小的城市在编号较大的城市的西边,已知各个城市的海拔高度互不相同,记城市\(i\)的海拔高度为 ...
- BZOJ 3224: Tyvj 1728 普通平衡树
3224: Tyvj 1728 普通平衡树 Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 9629 Solved: 4091[Submit][Sta ...
- BZOJ 3223: Tyvj 1729 文艺平衡树
3223: Tyvj 1729 文艺平衡树 Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 3628 Solved: 2052[Submit][Sta ...
- 【BZOJ-1570】BlueMary的旅行 分层建图 + 最大流
1570: [JSOI2008]Blue Mary的旅行 Time Limit: 15 Sec Memory Limit: 162 MBSubmit: 388 Solved: 212[Submit ...
- TYVJ P1080 N皇后
描述 检查一个如下的6 x 6的跳棋棋盘,有六个棋子被放置在棋盘上,使得每行.每列只有一个,每条对角线(包括两条主对角线的所有平行线)上至多有一个棋子. 列号 1 2 3 4 5 6 -- ...
- codevs 1036 商务旅行(Targin求LCA)
传送门 Description 某首都城市的商人要经常到各城镇去做生意,他们按自己的路线去做,目的是为了更好的节约时间. 假设有N个城镇,首都编号为1,商人从首都出发,其他各城镇之间都有道路连接,任意 ...
随机推荐
- 【VBA】Do While……Loop循环,遍历某列
[说明] Do While……Loop循环,遍历某列 i = Do While Trim(T_sh.Cells(i, NOTESID_COL)) <> "" If T_ ...
- HDU 2795 线段树区间最大值,单点更新+二分
Billboard Time Limit: 20000/8000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total ...
- 序列操作(bzoj 1858)
Description lxhgww最近收到了一个01序列,序列里面包含了n个数,这些数要么是0,要么是1,现在对于这个序列有五种变换操作和询问操作: 0 a b 把[a, b]区间内的所有数全变成0 ...
- poj 1637 Sightseeing tour 混合图欧拉回路 最大流 建图
题目链接 题意 给定一个混合图,里面既有有向边也有无向边.问该图中是否存在一条路径,经过每条边恰好一次. 思路 从欧拉回路说起 首先回顾有向图欧拉回路的充要条件:\(\forall v\in G, d ...
- Python学习杂记_5_列表常用操作
列表操作 列表时用方括号括起来的一组元素值,是可变变量,可通过下表取值,也可以通过下表来修改值,列表中的元素是有序的,可以是不同的基本数据类型,如: names=[1, 2, 3, “abc”, “d ...
- python c++ Visual Studio相关 Unable to find vcvarsall.bat问题
使用Cython编译包的时候报错: Unable to find vcvarsall.bat 说明:https://jingyan.baidu.com/article/adc815138162e8f7 ...
- springBoot AOP环绕增强、自定义注解、log4j2、MDC
(一)log4j2 maven配置 <dependency> <groupId>org.springframework.boot</groupId> <art ...
- Codeforces 898 B.Proper Nutrition
B. Proper Nutrition time limit per test 1 second memory limit per test 256 megabytes input standar ...
- 关于TP中U方法,在wamp中是绝对路径,在nginx中是相对路径?(坑)
这个问题已多次遇到,关于tp 框架 使用U 方法跳转, 在Nginx 服务器上可能会遇到路由跳转不过去前面带点(如:./xx) 解决这个问题,可以在tp的入口文件 index.php 里定义个常量 d ...
- Codeforces Round #343 (Div. 2) A. Far Relative’s Birthday Cake【暴力/组合数】
A. Far Relative’s Birthday Cake time limit per test 1 second memory limit per test 256 megabytes inp ...