NOIP系列
NOIP2015运输计划
唉
真是
这题
卡死我了
tarjan离线lca复杂度O(n)
最后各种卡常,多交几遍才A(洛谷104ms)
%%%zk学长609ms
注意二分的时候左边界要定成0
根据题意,显然先想到二分,然后求交集,在集合里找有没有边删掉之后使得所有路长度<mid
#include<bits/stdc++.h>
using namespace std;
char *TT,*mo,but[(<<)+];
#define getchar() ((TT==mo&&(mo=(TT=but)+fread(but,1,1<<15,stdin)),TT==mo)?0:*TT++)
inline int read(){
int x=,c=,f=;
for(;c<''||c>'';c=getchar())f=c!='-';
for(;c>=''&&c<='';c=getchar())x=x*+c-'';
return f?x:-x;
}
int root;
struct Q{
int a,b,lca,len;
}q[];
int head1[];
bool comp(Q A,Q B){
return A.len>B.len;
}
struct T1{
int next,to,num;
}e1[];
int cnt1;
void add1(int u,int v,int c){
e1[++cnt1].to=v;e1[cnt1].next=head1[u];e1[cnt1].num=c;head1[u]=cnt1;
}
struct T{
int next,to,cal;
}e[];
int cnt;
int head[];
int deep[];
int p[];
void add(int u,int v,int c){
e[++cnt].to=v;e[cnt].next=head[u];e[cnt].cal=c;head[u]=cnt;
}
int sum[];
int n,m;
int fa[];
int find(int x){
return !(fa[x]^x)?x:fa[x]=find(fa[x]);
}
void un(int x,int y){
x=find(x),y=find(y);
if(x^y)fa[x]=y;
}
bitset<>vis;
void init(int u){
vis[u]=;
for(int i=head[u];i;i=e[i].next){
if(vis[e[i].to])continue;
deep[e[i].to]=deep[u]+e[i].cal;
p[e[i].to]=e[i].cal;
init(e[i].to);
un(e[i].to,u);
}
for(int i=head1[u];i;i=e1[i].next){
int v=e1[i].to;
int ms=e1[i].num;
if(vis[v]!=){
q[ms].lca=find(v);
}
}
}
void dfs(int faf,int u){
for(int i=head[u];i;i=e[i].next){
if(!(e[i].to^faf))continue;
dfs(u,e[i].to);
sum[u]+=sum[e[i].to];
}
}
bool check(int mid){
memset(sum,,sizeof(sum));
int ret=;
register int i,j;
for(i=;i<=m;i++){
if(q[i].len<=mid)break;
sum[q[i].a]++;
sum[q[i].b]++;
sum[q[i].lca]-=;
ret=max(ret,q[i].len-mid);
}
i--;
dfs(,root);
for(j=;j<=n;j++){
if(p[j]>=ret&&sum[j]==i)return ;
}
return ;
}
int main(){
srand(time(NULL));
n=read(),m=read();
for(int i=;i<=n;i++)fa[i]=i;
int x,y,z;
for(int i=;i<n;i++){
x=read(),y=read(),z=read();
add(x,y,z);
add(y,x,z);
}
root=rand()%n+;
deep[root]=;
for(int i=;i<=m;i++){
q[i].a=read(),q[i].b=read();
add1(q[i].a,q[i].b,i);
add1(q[i].b,q[i].a,i);
}
init(root);
for(int i=;i<=m;i++){
q[i].len=deep[q[i].a]+deep[q[i].b]-*deep[q[i].lca];
}
sort(q+,q+m+,comp);
int l=,r=;
while(r>l){
int mid=l+r>>;
//cout<<mid<<endl;
if(check(mid))r=mid;
else l=mid+;
}
cout<<l;
return ;
}
NOIP系列的更多相关文章
- NOIP系列复习及题目集合
首先是我的酱油记了啦~: Xs的NOIP2014酱油记,持续更新中 知识点方面: noip知识点总结之--贪心 noip知识点总结之--线性筛法及其拓展 noip知识点总结之--欧几里得算法和扩展欧几 ...
- NOIP系列(续)
马上就要告别noip了呢. 这道题大家都说dfs可过. 但是数据范围一眼状压啊. 首先假设点是有序的(选取有先后顺序),其实这并不影响什么,但是却省下大量的时间和代码长度. 然后状压,dp[i]表示状 ...
- c++stl应用入门
在这篇中,我会讲几个简单易懂且比较常用的stl函数,这些函数在noip系列考试中往往被允许使用(既然让用我们自然不用手码了...) (末尾有惊喜!) 1.sort 绝大部分刚入门的oier第一个接触的 ...
- ACM-ICPC 训练平台 & 比赛 分析
the file can download in https://pan.baidu.com/s/1HwoLFHGAG-boQbIn9xIhxA occ5 the article is also pu ...
- luoguP2679 子串
luoguP2679 子串 个人感觉\(noip\)系列中挺好的一道DP题目. 题面有点难理解. 我们设\(f_{i,j,k,0/1}\)表示\(A\)串前\(i\)个字符,匹配\(B\)串前\(j\ ...
- noip推荐系列:遥控车[字符串+高精+二分答案]
[问题描述] 平平带着韵韵来到了游乐园,看到了n辆漂亮的遥控车,每辆车上都有一个唯一的名字name[i].韵韵早就迫不及待地想玩名字是s的遥控车.可是韵韵毕竟还小,她想象的名字可能是一辆车名字的前缀( ...
- noip推荐系列:汽艇[贪心]
[问题背景] 一天sxc,zsx,wl到gly坐汽艇,本来和其他的人约好了一起去,结果被放了鸽子,3人便只有一人负担x元去坐汽艇(很贵哦).坐了才发现如果汽艇上人多了位置就不宽敞,就不好玩了.而3个人 ...
- 【NOIP模拟赛】【数学真奇妙系列】纸盒子
Task 1.纸盒子(box.pas/box.c/box.cpp) [题目描述] Mcx是一个有轻度洁癖的小朋友.有一天,当他沉溺于数学卷子难以自拔的时候,恍惚间想起在自己当初学习概率的时候准备的一堆 ...
- [日常] NOIP前集训日记
写点流水账放松身心... 10.8 前一天考完NHEEE的一调考试终于可以开始集训了Orz (然后上来考试就迟到5min, GG) T1维护队列瞎贪心, 过了大样例交上去一点也不稳...T出翔只拿了5 ...
随机推荐
- 不老的神器--namp,awvs
要会使用的工具 NESSUS nmap awvs hydra burpsuit 工具的话,都有文档,应该多使用 -h 多看官方文档,就会用了. 1.namp基本用法 -iL <inputfile ...
- Unity Android设备的输入
Unity Android设备的输入 1依据屏幕位置输入 有的时候也许是为了整个有些风格的干净,减少屏幕上的UI图标,以至于摒弃了虚拟按键这种常用的输入方式.为了替代虚拟按键的输入方式而选择了依据点击 ...
- leetcode-最大子序和(动态规划讲解)
最大子序和(动态规划讲解) 给定一个整数数组 nums ,找到一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和. 示例: 输入: [-2,1,-3,4,-1,2,1,-5,4], 输 ...
- Wordcount -- MapReduce example -- Reducer
Reducer receives (key, values) pairs and aggregate values to a desired format, then write produced ( ...
- LeetCode - 231. Power of Two - 判断一个数是否2的n次幂 - 位运算应用实例 - ( C++ )
1.题目:原题链接 Given an integer, write a function to determine if it is a power of two. 给定一个整数,判断该整数是否是2的 ...
- 六: Image Viewer 离线镜像查看器
参考:http://hadoop.apache.org/docs/r2.6.3/hadoop-project-dist/hadoop-hdfs/HdfsImageViewer.html 离线镜像查 ...
- BZOJ 3790 神奇项链 hash/后缀自动机+贪心
Description 母亲节就要到了,小 H 准备送给她一个特殊的项链.这个项链可以看作一个用小写字母组成的字符串,每个小写字母表示一种颜色. 为了制作这个项链,小 H 购买了两个机器.第一个机器可 ...
- JavaScript中childNodes和children的区别
我在学习JavaScript对DOM操作的过程中,发现了使用childNodes属性,得不到我想要的结果,因此我就从JavaScript高级程序设计中了解了childNodes和children的区别 ...
- 《剑指Offer》题六十一~题六十八
六十一.扑克牌中的顺子 题目:从扑克牌中随机抽5张牌,判断是不是一个顺子,即这5张牌是不是连续的.2~10为数字本身,A为1,J为11,Q为12,K为13,而大.小王可以看成任意数字. 六十二.圆圈中 ...
- 20172330 2017-2018-1 《Java程序设计》第七周学习总结
学号 2017-2018-1 <程序设计与数据结构>第七周学习总结 教材学习内容总结 这一章主要是对继承的学习: 继承是组织和创建类的基本技术,概念简单但影响重大,决定着面向对象软件的设计 ...