并查集 || [USACO18JAN]MooTube || BZOJ 5188 || Luogu P4185
题解:
对边和询问都排序,然后每次把符合当前要求的边都扔并查集里,对于每个询问判断当前并查集里节点数即可。
我很无聊地给并查集加了按秩排序,还开了O2,加了快读,也才170ms,虽然在第一面,然鹅还是没有办法排太前。
上述操作都不做也行
代码:
#include<cstdio>
#include<algorithm>
using namespace std;
inline int rd(){
int x=; char c=getchar();
while(c<''||c>'')c=getchar();
while(c>=''&&c<=''){x=x*+c-''; c=getchar();}
return x;
}
const int maxn=1e5+,maxq=1e5+;
int N,Q,a,b,c,fa[maxn],dep[maxn],f1,f2,now,cnt[maxn],ans[maxq];
struct Edge{ int from,to,dis; }edge[maxn];
struct Query_{ int k,x,id; }qry[maxq];
inline bool cmp1(const Edge&a,const Edge&b){ return a.dis>b.dis; }
inline bool cmp2(const Query_&a,const Query_&b){ return a.k>b.k; }
inline int getf(int a){
if(fa[a]==a) return a;
fa[a]=getf(fa[a]);
return fa[a];
}
int main(){
scanf("%d%d",&N,&Q);
for(int i=;i<N;i++){
a=rd(); b=rd(); c=rd();
edge[i].from=a;
edge[i].to=b;
edge[i].dis=c;
}
for(int i=;i<=Q;i++){
a=rd(); b=rd();
qry[i].k=a; qry[i].x=b; qry[i].id=i;
}
sort(edge+,edge+N,cmp1);
sort(qry+,qry+Q+,cmp2);
for(int i=;i<=N;i++) fa[i]=i,cnt[i]=;
now=;
for(int i=;i<=Q;i++){
while(now+<=N- && edge[now+].dis>=qry[i].k){
now++;
f1=getf(edge[now].from);
f2=getf(edge[now].to);
if(f1!=f2){
if(dep[f1]<dep[f2]){
fa[f1]=f2;
cnt[f2]+=cnt[f1];
}
else if(dep[f1]>dep[f2]){
fa[f2]=f1;
cnt[f1]+=cnt[f2];
}
else{
fa[f1]=f2;
dep[f2]++;
cnt[f2]+=cnt[f1];
}
}
}
ans[qry[i].id]=cnt[getf(qry[i].x)]-;
}
for(int i=;i<=Q;i++) printf("%d\n",ans[i]);
return ;
}
By:AlenaNuna
并查集 || [USACO18JAN]MooTube || BZOJ 5188 || Luogu P4185的更多相关文章
- 【BZOJ 3674】可持久化并查集加强版&【BZOJ 3673】可持久化并查集 by zky 用可持久化线段树破之
最后还是去掉异或顺手A了3673,,, 并查集其实就是fa数组,我们只需要维护这个fa数组,用可持久化线段树就行啦 1:判断是否属于同一集合,我加了路径压缩. 2:直接把跟的值指向root[k]的值破 ...
- BZOJ 3673 可持久化并查集 by zky && BZOJ 3674 可持久化并查集加强版 可持久化线段树
既然有了可持久化数组,就有可持久化并查集.. 由于上课讲过说是只能按秩合并(但是我也不确定...),所以就先写了按秩合并,相当于是维护fa[]和rk[] getf就是在这棵树中找,直到找到一个点的fa ...
- 2019牛客第八场多校 E_Explorer 可撤销并查集(栈)+线段树
目录 题意: 分析: @(2019牛客暑期多校训练营(第八场)E_Explorer) 题意: 链接 题目类似:CF366D,Gym101652T 本题给你\(n(100000)\)个点\(m(1000 ...
- BZOJ 1370: [Baltic2003]Gang团伙(luogu 1892)(种类并查集)
题面: bzoj题面有误,还是看luogu的吧 https://www.luogu.org/problemnew/show/P1892 题解: 种类并查集.. 因为有敌人的敌人是朋友这个条件,所以需要 ...
- Luogu P2391 白雪皑皑 && BZOJ 2054: 疯狂的馒头 并查集
4月的时候在luogu上做过 白雪皑皑 这道题,当时一遍AC可高兴了qwq,后来去了个厕所,路上忽然发现自己的做法是错的qwq...然后就咕咕了qwq 今天看到了 疯狂的馒头 ,发现一毛一样OvO.. ...
- luogu4185 [USACO18JAN]MooTube (并查集)
类似于NOI2018d1t1的离线做法,把询问存下来,排个序,然后倒着给并查集加边,每次询问并查集联通块大小 #include<bits/stdc++.h> #define ll long ...
- [USACO18JAN] MooTube (离线并查集)
题目大意:给你一棵边权树,定义两点间距离为它们唯一路径上的最小路权,求与某点距离不大于K(k为已知)的点的数量 带权并查集维护集合内元素总数 路和问题 都按权值大到小排序,枚举问题, 建权值不小于K的 ...
- 并查集+时光倒流 || [JSOI2008]星球大战starwar || BZOJ 1015 || Luogu P1197
题面:P1197 [JSOI2008]星球大战 题解: 坑点有点多啊,加上我本来就有点头昏脑涨,一道水题写了一万年.. 并查集不支持拆开(但是可以撤销合并),只支持合并.所以把询问离线了,从最后状态到 ...
- 并查集+优先队列+启发式合并 || 罗马游戏 || BZOJ 1455 || Luogu p2713
题面:P2713 罗马游戏 题解: 超级大水题啊,特别水.. 并查集维护每个人在哪个团里,优先队列维护每个团最低分和最低分是哪位,然后每次判断一下哪些人死了,随便写写就行 并查集在Merge时可以用启 ...
随机推荐
- leetcode 116填充每个节点的下一个右侧节点指针
time O(n) ,sapce O(n) /* // Definition for a Node. class Node { public: int val; Node* left; Node* r ...
- Linux下监控网卡流量的软件Nload
Linux下监控网卡流量的软件Nload 安装nload: # wget http://www.roland-riegel.de/nload/nload-0.7.2.tar.gz # tar zxvf ...
- Service Mesh体验
前言# 计算机软件技术发展到现在,软件架构的演进无不朝着让开发者能够更加轻松快捷地构建大型复杂应用的方向发展.容器技术最初是为了解决运行环境的不一致问题而产生的,随着不断地发展,围绕容器技术衍生出来越 ...
- 爬虫五之Selenium
Selenium 自动化测试工具,支持多种浏览器: 爬虫中主要用来解决JavaScript渲染问题. 用法详解 基本使用 声明浏览器对象 from selenium import webdriver ...
- 【miscellaneous】华为智能视频监控系统设计解决方案
[导读] 近年来,随着经济的快速增长.社会的迅速进步,校园.工厂园区.中小企业.楼宇等领域对安全防范和现场记录报警系统的需求与日俱增,视频监控在工作.生活各方面得到了非常广泛的应用. 1.中小型视频监 ...
- 深入理解java:2.3.6. 并发编程concurrent包 之管理类---线程池
我们使用线程的时候就去创建一个线程,这样实现起来非常简便,但是就会有一个问题: 如果并发的线程数量很多,并且每个线程都是执行一个时间很短的任务就结束了,这样频繁创建线程就会大大降低系统的效率,因为频繁 ...
- Linux文件目录的权限
权限对文件的重要性:(主要是针对文件的内容而言,与文件名没有关系) r: 可读取此文件的实际内容. w: 可以编辑.新增或者修改该文件的内容(但不能删除该文件) x: 该文件具有可以被系统执行的权限. ...
- MySQL数据库的常见操作
1.查看所有的数据库 1 show databases; 2.创建数据库 后面的时编码格式 1 create database dbName charset='utf8'; 3.使用/切换数据库 1 ...
- effective_io_concurrency很重要的一个参数
effective_io_concurrency (integer) Sets the number of concurrent disk I/O operations that PostgreSQL ...
- Linux下路由配置梳理(转)
转自:https://www.cnblogs.com/kevingrace/p/6490627.html 在日常运维作业中,经常会碰到路由表的操作.下面就linux运维中的路由操作做一梳理:----- ...