[USACO18JAN] MooTube (离线并查集)
题目大意:给你一棵边权树,定义两点间距离为它们唯一路径上的最小路权,求与某点距离不大于K(k为已知)的点的数量
带权并查集维护集合内元素总数
路和问题 都按权值大到小排序,枚举问题, 建权值不小于K的边,并查集维护连通性,求集合元素内总数即可
#include <bits/stdc++.h>
#define N 200100
#define inf 0x3f3f3f3f
using namespace std; int n,q,cnt;
int fa[N],f[N];
struct EDGE{
int x,y,w;
}edge[N];
struct QUES{
int k,v,id,ans;
}ques[N]; int cmp1(EDGE s1,EDGE s2) {return s1.w>s2.w;}
int cmp2(QUES s1,QUES s2) {return s1.k>s2.k;}
int cmp3(QUES s1,QUES s2) {return s1.id<s2.id;}
void edge_add(int x,int y,int z)
{
cnt++;
edge[cnt].x=x;
edge[cnt].y=y;
edge[cnt].w=z;
}
int find_fa(int x)
{
int fx=x;
while(fx!=fa[fx]) {fx=fa[fx];}
while(fa[x]!=fx)
{
int pr=fa[x];
f[pr]-=f[x];
fa[x]=fx;
x=pr;
}
return fx;
}
void comb(int x,int y)
{
int fx=find_fa(x);
int fy=find_fa(y);
fa[fy]=fx;
f[fx]+=f[fy];
} int main()
{
scanf("%d%d",&n,&q);
for(int i=;i<n;i++)
{
int x,y,z;
scanf("%d%d%d",&x,&y,&z);
edge_add(x,y,z);
}
sort(edge+,edge+n,cmp1);
for(int i=;i<=q;i++)
{
int x,y;
scanf("%d%d",&x,&y);
ques[i].k=x;
ques[i].v=y;
ques[i].id=i;
}
sort(ques+,ques+q+,cmp2);
for(int i=;i<=n;i++)
{
fa[i]=i;
f[i]=;
}
int j=;
for(int i=;i<=q;i++)
{
while(edge[j].w>=ques[i].k)
{
comb(edge[j].x,edge[j].y);
j++;
}
int fv=find_fa(ques[i].v);
ques[i].ans=f[fv]-;
}
sort(ques+,ques+q+,cmp3);
for(int i=;i<=q;i++)
{
printf("%d\n",ques[i].ans);
}
return ;
}
[USACO18JAN] MooTube (离线并查集)的更多相关文章
- [bzoj1015](JSOI2008)星球大战 starwar(离线+并查集)
Description 很久以前,在一个遥远的星系,一个黑暗的帝国靠着它的超级武 器统治者整个星系.某一天,凭着一个偶然的机遇,一支反抗军摧毁了帝国的超级武器,并攻下了星系中几乎所有的星球.这些星球通 ...
- ACM学习历程—Hihocoder 1291 Building in Sandbox(dfs && 离线 && 并查集)
http://hihocoder.com/problemset/problem/1291 前几天比较忙,这次来补一下微软笔试的最后一题,这题是这次微软笔试的第四题,过的人比较少,我当时在调试B题,没时 ...
- HDU5441 Travel 离线并查集
Travel Problem Description Jack likes to travel around the world, but he doesn’t like to wait. Now, ...
- [USACO18FEB] Snow Boots G (离线+并查集)
题目大意:略 网上各种神仙做法,本蒟蒻只想了一个离线+并查集的做法 对所有靴子按最大能踩的深度从大到小排序,再把所有地砖按照积雪深度从大到小排序 一个小贪心思想,我们肯定是在 连续不能踩的地砖之前 的 ...
- 【杭电OJ3938】【离线+并查集】
http://acm.hdu.edu.cn/showproblem.php?pid=3938 Portal Time Limit: 2000/1000 MS (Java/Others) Memo ...
- Bzoj5188/洛谷P4185 [Usaco2018 Jan]MooTube(并查集)
题面 Bzoj 洛谷 题解 最暴力的方法是直接判两个点之间的路径最小值是否\(\geq k\),用\(Dijkstra\)可以做到该算法最快效率,但是空间复杂度始终是\(O(n^2)\)的,会\(ML ...
- BZOJ4551 Tjoi2016&Heoi2016树(离线+并查集)
似乎是弱化的qtree3.树剖什么的非常无脑.考虑离线.并查集维护每个点的最近打标记祖先,倒序处理,删除标记时将其与父亲合并即可. #include<iostream> #include& ...
- Artwork Gym - 101550A 离线并查集
题目:题目链接 思路:每个空白区域当作一个并查集,因为正着使用并查集分割的话dfs会爆栈,判断过于复杂也会导致超时,我们采用离线反向操作,先全部涂好,然后把黑格子逐步涂白,我们把每个空白区域当作一个并 ...
- 题解报告:zoj 3261 Connections in Galaxy War(离线并查集)
Description In order to strengthen the defense ability, many stars in galaxy allied together and bui ...
随机推荐
- 计蒜客 第 m 大的身份证号码 (水)
链接 : Here! 思路 : 水题 代码 : #include <cstdio> #include <string> #include <iostream> #i ...
- [51nod1074] 约瑟夫问题 V2
毫无思路,Orz了一下大佬的思路%%%. 大概就是因为k比n小的多,我们知道约瑟夫环有个公式是fn=(fn-1+k) mod n 可以改一下,改成fn+p=(fn+pk) mod (n+p) 但是这样 ...
- bitset骚操作
bitset的用途挺多的,是一个比较骚的常数优化 一.很多位数的二进制数 poj 2443 http://poj.org/problem?id=2443 直接开个1万位的二进制数,求交就行了. 有关集 ...
- 【hiho一下 第十一周】树中的最长路
[题目链接]:http://hihocoder.com/problemset/problem/1050 [题意] [题解] 有一个经典的求树的直径的方法; 首先; 树的直径的两端的端点必然都在树的叶子 ...
- 简洁又快速地处理集合——Java8 Stream(上)
Java 8 发布至今也已经好几年过去,如今 Java 也已经向 11 迈去,但是 Java 8 作出的改变可以说是革命性的,影响足够深远,学习 Java 8 应该是 Java 开发者的必修课. 今天 ...
- [GraphQL] Mutations and Input Types
Sometimes, you want to resues object type when doing mutation, you can use 'input' type to help: inp ...
- Linux 网卡驱动学习(六)(应用层、tcp 层、ip 层、设备层和驱动层作用解析)
本文将介绍网络连接建立的过程.收发包流程,以及当中应用层.tcp层.ip层.设备层和驱动层各层发挥的作用. 1.应用层 对于使用socket进行网络连接的server端程序.我们会先调用socket函 ...
- Android通过Intent.ACTION_CLOSE_SYSTEM_DIALOGS监听Home按键消息
Android对屏幕下方经常使用的四个按键消息处理是不一致的: 1.搜索按键的消息在onKeyDown或者onKeyUp中接收: 2.菜单按键的消息在onCreateOptionsMenu.onKey ...
- tcMalloc 配置和优化 nginx 高性能
tcMalloc优化nginx 记住:nginx一定要先启动 1>下载安装libunwind: #wget http://download.savannah.gnu.org/releases ...
- DB-MySQL:MySQL 复制表
ylbtech-DB-MySQL:MySQL 复制表 1.返回顶部 1. MySQL 复制表 如果我们需要完全的复制MySQL的数据表,包括表的结构,索引,默认值等. 如果仅仅使用CREATE TA ...