[洛谷P4185] [USACO18JAN]MooTube
题目链接:###
题意:###
给定一颗N个节点的树,定义两点距离为他们之间路径中边权最小值。
Q次询问K,V,询问到V距离>=K的点有多少(不含V)
呃呃呃呃考试的时候直奔了T3,结果公式推挂了(。。)最后5min回来搞T1,看出了正解然而手速跟不上……
分析:###
把所有的询问先离线下来存在一个结构体里并记录顺序(以便输出),然后分别把边和询问按w和k从大到小排序
用一个循环扫询问,每次询问把大于等于ask[i].k的边加进并查集并更新总和,最后按顺序排回来输出
具体的操作都在代码里
代码:###
#include<bits/stdc++.h>
#define N (200000+5)
using namespace std;
inline int read(){
int cnt=0,f=1;char c;
c=getchar();
while(!isdigit(c)){
if(c=='-')f=-f;
c=getchar();
}
while(isdigit(c)){
cnt=cnt*10+c-'0';
c=getchar();
}
return cnt*f;
}
int n,q,id[N],p=1,fa[N];
struct node{int x;int y;int w;} edge[N];
struct node2{int num;int v;int k;int res;} ask[N];
bool cmp(node a,node b){
return a.w>b.w;
}
bool cmp2(node2 a,node2 b){
return a.k>b.k;
}
bool cmp3(node2 a,node2 b){
return a.num<b.num;
}
int get_father(int x){
if(fa[x]==x)return x;
return fa[x]=get_father(fa[x]);
}
void merge(int a,int b){
int x=get_father(a);
int y=get_father(b);
if(x==y) return;
else fa[x]=y;
id[y]+=id[x];
}
int main(){
n=read();q=read();
for(register int i=1;i<=n;i++) fa[i]=i,id[i]=1;
for(register int i=1;i<n;i++) {
edge[i].x=read();
edge[i].y=read();
edge[i].w=read();
}
for(register int i=1;i<=q;i++) {
ask[i].k=read();
ask[i].v=read();
ask[i].num=i;
}
sort(edge+1,edge+n,cmp);
sort(ask+1,ask+q+1,cmp2);
for(register int i=1;i<=q;i++){
while(edge[p].w>=ask[i].k&&p<n){
merge(edge[p].x,edge[p].y);
p++;
}
int t=get_father(ask[i].v);
ask[i].res=id[t]-1;
}
sort(ask+1,ask+q+1,cmp3);
for(register int i=1;i<=q;i++) printf("%d\n",ask[i].res);
return 0;
}
[洛谷P4185] [USACO18JAN]MooTube的更多相关文章
- Bzoj5188/洛谷P4185 [Usaco2018 Jan]MooTube(并查集)
题面 Bzoj 洛谷 题解 最暴力的方法是直接判两个点之间的路径最小值是否\(\geq k\),用\(Dijkstra\)可以做到该算法最快效率,但是空间复杂度始终是\(O(n^2)\)的,会\(ML ...
- [洛谷P4183][USACO18JAN]Cow at Large P
题目链接 Bzoj崩了之后在洛谷偶然找到的点分好题! 在暴力的角度来说,如果我们$O(n)$枚举根节点,有没有办法在$O(n)$的时间内找到答案呢? 此时如果用树形$dp$的想法,发现是可做的,因为可 ...
- 洛谷 P4183 - [USACO18JAN]Cow at Large P(点分治)
洛谷题面传送门 点分治 hot tea. 首先考虑什么样的点能够对以 \(u\) 为根的答案产生 \(1\) 的贡献.我们考虑以 \(u\) 为根对整棵树进行一遍 DFS.那么对于一个点 \(v\), ...
- 洛谷 P4181 [USACO18JAN]Rental Service
P4181 [USACO18JAN]Rental Service 题意翻译 farmer john有N(1≤N≤100,000)头牛,他想赚跟多的钱,所以他准备买牛奶和出租牛.有M(1≤M≤100,0 ...
- 2018.10.25 洛谷P4187 [USACO18JAN]Stamp Painting(计数dp)
传送门 其实本来想做组合数学的2333. 谁知道是道dpdpdp. 唉只能顺手做了 还是用真难则反的思想. 这题我们倒着考虑,只需要求出不合法方案数就行了. 这个显然是随便dpdpdp的. f[i]f ...
- 并查集 || [USACO18JAN]MooTube || BZOJ 5188 || Luogu P4185
题面:[USACO18JAN]MooTube 题解: 对边和询问都排序,然后每次把符合当前要求的边都扔并查集里,对于每个询问判断当前并查集里节点数即可. 我很无聊地给并查集加了按秩排序,还开了O2,加 ...
- 【LG4185】[USACO18JAN]MooTube
[LG4185][USACO18JAN]MooTube 题面 洛谷 题解 先将所有操作和询问离线 然后按照边权从大到小将操作和询问排序 利用\(two\;pointers\),每次扫到一个询问,将边权 ...
- 洛谷1640 bzoj1854游戏 匈牙利就是又短又快
bzoj炸了,靠离线版题目做了两道(过过样例什么的还是轻松的)但是交不了,正巧洛谷有个"大牛分站",就转回洛谷做题了 水题先行,一道傻逼匈牙利 其实本来的思路是搜索然后发现写出来类 ...
- 洛谷P1352 codevs1380 没有上司的舞会——S.B.S.
没有上司的舞会 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 钻石 Diamond 题目描述 Description Ural大学有N个职员,编号为1~N.他们有 ...
随机推荐
- (转载)常用的Mysql数据库操作语句大全
打开CMD,进入数据库命令:mysql -hlocalhost -uroot -p 退出数据库:exit 用户管理: 1.新建用户: >CREATE USER name IDENTIFIED B ...
- DOM操作一
1.通过ID选取元素 var section = document.getElementById("section1"); 2.通过ID查找多个元素 function getEle ...
- 按行读入xml文件,删除不需要的行 -Java
删除挺麻烦的,这里其实只是把需要的行存到arraylist中再存到另一个文件中 import java.io.BufferedReader;import java.io.BufferedWriter; ...
- QT实现FTP服务器(二)
QClientThread类的实现: #include "QClientThread.h" #include <QDebug> /******************* ...
- spring的依赖注入(DI)、控制反转(IOC)和面向切面(AOP)
在spring的配置文件增加 <context:component-scan base-package="com.jmu.ccjoin.service"/> <c ...
- SDUT OJ 1598 周游列国
周游列国 Time Limit: 1000ms Memory limit: 32768K 有疑问?点这里^_^ 题目描述 大家都知道孔子吧,春秋战国时候的一个老头儿.当时出国还不用护照,所以他经 ...
- Scrapy爬虫报错:ModuleNotFoundError: No module named 'win32api'
运行 scrapy crawl douban_spider 出现报错: 解决办法:安装pywin32,下载适配安装的Python版本(64位,Python3.6) 下载地址: https://sour ...
- oracle重命名数据文件
重命名数据文件 方法1: sql>alter tablespace users offline; sql>host cp /u01/app/oracle/oradata/orcl/us ...
- hdu-2680 Choose the best route(最短路)
题目链接: Choose the best route Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K ( ...
- NOIP2008 传纸条(DP及滚动数组优化)
传送门 这道题有好多好多种做法呀……先说一下最暴力的,O(n^4的做法) 我们相当于要找两条从左上到右下的路,使路上的数字和最大.所以其实路径从哪里开始走并不重要,我们就直接假设全部是从左上出发的好啦 ...