【luogu4185】 [USACO18JAN]MooTube [并查集]
P4185 [USACO18JAN]MooTube
并查集好合并不好拆开 可以考虑离线 先读入 从大到小排序 再依次合并
技巧:不好断开就倒着来合并 JSOI2008 P1197 也是该思想
#include<bits/stdc++.h> using namespace std; #define Max(x,y) (x)<(y)?(y):(x) #define Min(x,y) (x)<(y)?(x):(y) #define ll long long #define rg register const int N=300000+5,M=1000000+5,inf=0x3f3f3f3f,P=9999973; int n,m,f[N],sz[N]; template <class t>void rd(t &x){x=0;int w=0;char ch=0;while(!isdigit(ch)) w|=ch=='-',ch=getchar();while(isdigit(ch)) x=(x<<1)+(x<<3)+(ch^48),ch=getchar();x=w?-x:x; }int find(int x) {return f[x]==x?x:f[x]=find(f[x]);} void merge(int x,int y){int fx=find(x),fy=find(y);if(fx==fy) return;sz[fx]+=sz[fy],f[fy]=fx; }struct edge{int u,v,w;}e[N<<1]; struct node{int k,v,pos,ans;}ask[N]; bool cmp1(edge a,edge b){return a.w>b.w;} bool cmp2(node a,node b){return a.k>b.k;} bool cmp3(node a,node b){return a.pos<b.pos;}int main(){ // freopen("in.txt","r",stdin);rd(n),rd(m),f[n]=n,sz[n]=1;for(int i=1;i<n;++i) rd(e[i].u),rd(e[i].v),rd(e[i].w),f[i]=i,sz[i]=1;for(int i=1;i<=m;++i) rd(ask[i].k),rd(ask[i].v),ask[i].pos=i;sort(e+1,e+n,cmp1);sort(ask+1,ask+m+1,cmp2);for(int i=1,nxte=1;i<=m;++i){while(nxte<n&&e[nxte].w>=ask[i].k)merge(e[nxte].u,e[nxte].v),++nxte;ask[i].ans=sz[find(ask[i].v)]-1;} // for(int i=1;i<=n;++i) printf("%d ",sz[i]);sort(ask+1,ask+m+1,cmp3);for(int i=1;i<=m;++i) printf("%d\n",ask[i].ans);return 0; }
转载于:https://www.cnblogs.com/lxyyyy/p/11220678.html
【luogu4185】 [USACO18JAN]MooTube [并查集]相关推荐
- luogu4185 [USACO18JAN]MooTube Gold
http://www.elijahqi.win/2018/02/02/luogu4185-usaco18janmootube-gold/ 题目描述 In his spare time, Farmer ...
- 并查集c++代码_[Leetcode 每日精选](本周主题-并查集) 547. 朋友圈
题目难度: 中等 原题链接 今天继续来做并查集的问题, 这道题仍然比较基础, 而且也是个比较接近现实的问题了. 大家在我的公众号"每日精选算法题"中的聊天框中回复 并查集 就能看到 ...
- HDU1811 Rank of Tetris 拓扑排序+并查集 OR 差分约束最短路+并查集
题目链接 题意:就是给你一堆关系,看能不能排出个确定的顺序 做法: 1. 拓扑排序+并查集 应该很容易想到的一种思路,大于小于建立单向边.对于相等的呢,就把他们缩成一个点.就用并查集缩成一个点就行了 ...
- HDU 2586 How far away ? LCA ---tanjar+并查集 离线算法
tanjar算法离线求LCA的思想主要是利用并查集的思想. 求距离的话就是d[start[i]]+end[en[i]]-2*d[lca[i]]; 首先从根节点dfs,在深度遍历的回溯的过程中不断的更新 ...
- POJ - 2513 Colored Sticks 欧拉通路+并查集+静态树
一开始想用map来搞,但是感觉好复杂,然后想了一下看大佬们用trie做的,感觉十分合理就敲了一发. 一开始re,数组要开到550000 只会静态的字典树,在每个根节点看是否出现过改颜色,如果没有就把该 ...
- 关于 并查集(union find) 算法基本原理 以及 其 在分布式图场景的应用
二月的最后一篇水文-想写一些有意思的东西. 文章目录 环检测在图数据结构中的应用 深度/广度优先 检测环 并查集数据结构 (Union-Find) 基本概念 初始化 合并 union 查找祖先 优化1 ...
- 【BZOJ1015】【JSOI2008】星球大战 并查集
题目大意 给你一张\(n\)个点\(m\)条边的无向图,有\(q\)次操作,每次删掉一个点以及和这个点相邻的边,求最开始和每次删完点后的连通块个数. \(q\leq n\leq 400000,m\le ...
- 并查集 HDOJ 1232 畅通工程
题目传送门 1 /* 2 并查集(Union-Find)裸题 3 并查集三个函数:初始化Init,寻找根节点Find,连通Union 4 考察:连通边数问题 5 */ 6 #include <c ...
- 1013 Battle Over Cities(并查集解法)
关于背景的介绍见1013 Battle Over Cities(图的DFS解法) DFS就是不算特定结点后数连通子图的总数,再减一.我想着那么并查集就是数不算特定节点后,集合元素(根)的个数.但是我弄 ...
最新文章
- 在IntentService中使用Toast与在Service中使用Toast的异同,intentservicetoast
- 常考数据结构与算法:数组中相加和为0的三元组
- How OPA addFrame is called
- 暴击!被初中生碾压智商!这份被国家数学集训队采用的初中奥数资料究竟有多厉害?...
- spark 提交至yarn异常超时 Client cannot authenticate via:[TOKEN, KERBEROS]
- smarty模板引擎(一)基础知识
- Hadoop MapReduce编程 API入门系列之倒排索引(二十四)
- 正弦波叠加成方波--Python简易版
- 波段高低点指标公式 k线高低点 大盘主图公式源码
- linux操作系统课程设计总结,计算机操作系统(课程设计)报告.docx
- CSS 发明者 Håkon Wium Lie 访谈--csdn zhangxin09
- python 相关性检验_Python中的相关分析correlation analysis的实现
- 【数据结构】【A鹿】malloc和其他相关预备知识
- MySQL installer直接解决安装(包括不想安在c盘也OK)、更新、卸载问题
- xyoj 6042:让人头疼的“双十一”
- cacheable 过期设置
- 较为精细的陆地和海洋掩膜
- 从Internet时间服务器获取标准时间
- 作为一个测试,必须了解业务
- 5th-Generation Mobile Communication Technology(一)
热门文章
- 手机学习android,用手机来学习 学生必备6款Android应用软件
- Ubuntu系统(四)-修改主机名和配置DNS上网
- java使用重绘实现拖动_【Android】利用自己定义View的重绘实现拖动移动,获取组件的尺寸...
- linux网络安装mysql_linux系统安装mysql
- redis入门基础知识(一)
- Formview的自动绑定
- VBA中数组(Array)与随机数(Rnd)的使用
- Discuz3.2开启图片列表显示教程
- C#正则表达式——网游角色起名仅允许汉字、字母、数字、底划线
- WebKit新特性WebGL