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 [并查集]相关推荐

  1. luogu4185 [USACO18JAN]MooTube Gold

    http://www.elijahqi.win/2018/02/02/luogu4185-usaco18janmootube-gold/ 题目描述 In his spare time, Farmer ...

  2. 并查集c++代码_[Leetcode 每日精选](本周主题-并查集) 547. 朋友圈

    题目难度: 中等 原题链接 今天继续来做并查集的问题, 这道题仍然比较基础, 而且也是个比较接近现实的问题了. 大家在我的公众号"每日精选算法题"中的聊天框中回复 并查集 就能看到 ...

  3. HDU1811 Rank of Tetris 拓扑排序+并查集 OR 差分约束最短路+并查集

    题目链接 题意:就是给你一堆关系,看能不能排出个确定的顺序 做法: 1. 拓扑排序+并查集 应该很容易想到的一种思路,大于小于建立单向边.对于相等的呢,就把他们缩成一个点.就用并查集缩成一个点就行了 ...

  4. HDU 2586 How far away ? LCA ---tanjar+并查集 离线算法

    tanjar算法离线求LCA的思想主要是利用并查集的思想. 求距离的话就是d[start[i]]+end[en[i]]-2*d[lca[i]]; 首先从根节点dfs,在深度遍历的回溯的过程中不断的更新 ...

  5. POJ - 2513 Colored Sticks 欧拉通路+并查集+静态树

    一开始想用map来搞,但是感觉好复杂,然后想了一下看大佬们用trie做的,感觉十分合理就敲了一发. 一开始re,数组要开到550000 只会静态的字典树,在每个根节点看是否出现过改颜色,如果没有就把该 ...

  6. 关于 并查集(union find) 算法基本原理 以及 其 在分布式图场景的应用

    二月的最后一篇水文-想写一些有意思的东西. 文章目录 环检测在图数据结构中的应用 深度/广度优先 检测环 并查集数据结构 (Union-Find) 基本概念 初始化 合并 union 查找祖先 优化1 ...

  7. 【BZOJ1015】【JSOI2008】星球大战 并查集

    题目大意 给你一张\(n\)个点\(m\)条边的无向图,有\(q\)次操作,每次删掉一个点以及和这个点相邻的边,求最开始和每次删完点后的连通块个数. \(q\leq n\leq 400000,m\le ...

  8. 并查集 HDOJ 1232 畅通工程

    题目传送门 1 /* 2 并查集(Union-Find)裸题 3 并查集三个函数:初始化Init,寻找根节点Find,连通Union 4 考察:连通边数问题 5 */ 6 #include <c ...

  9. 1013 Battle Over Cities(并查集解法)

    关于背景的介绍见1013 Battle Over Cities(图的DFS解法) DFS就是不算特定结点后数连通子图的总数,再减一.我想着那么并查集就是数不算特定节点后,集合元素(根)的个数.但是我弄 ...

最新文章

  1. 在IntentService中使用Toast与在Service中使用Toast的异同,intentservicetoast
  2. 常考数据结构与算法:数组中相加和为0的三元组
  3. How OPA addFrame is called
  4. 暴击!被初中生碾压智商!这份被国家数学集训队采用的初中奥数资料究竟有多厉害?...
  5. spark 提交至yarn异常超时 Client cannot authenticate via:[TOKEN, KERBEROS]
  6. smarty模板引擎(一)基础知识
  7. Hadoop MapReduce编程 API入门系列之倒排索引(二十四)
  8. 正弦波叠加成方波--Python简易版
  9. 波段高低点指标公式 k线高低点 大盘主图公式源码
  10. linux操作系统课程设计总结,计算机操作系统(课程设计)报告.docx
  11. CSS 发明者 Håkon Wium Lie 访谈--csdn zhangxin09
  12. python 相关性检验_Python中的相关分析correlation analysis的实现
  13. 【数据结构】【A鹿】malloc和其他相关预备知识
  14. MySQL installer直接解决安装(包括不想安在c盘也OK)、更新、卸载问题
  15. xyoj 6042:让人头疼的“双十一”
  16. cacheable 过期设置
  17. 较为精细的陆地和海洋掩膜
  18. 从Internet时间服务器获取标准时间
  19. 作为一个测试,必须了解业务
  20. 5th-Generation Mobile Communication Technology(一)

热门文章

  1. 手机学习android,用手机来学习 学生必备6款Android应用软件
  2. Ubuntu系统(四)-修改主机名和配置DNS上网
  3. java使用重绘实现拖动_【Android】利用自己定义View的重绘实现拖动移动,获取组件的尺寸...
  4. linux网络安装mysql_linux系统安装mysql
  5. redis入门基础知识(一)
  6. Formview的自动绑定
  7. VBA中数组(Array)与随机数(Rnd)的使用
  8. Discuz3.2开启图片列表显示教程
  9. C#正则表达式——网游角色起名仅允许汉字、字母、数字、底划线
  10. WebKit新特性WebGL