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系列的更多相关文章

  1. NOIP系列复习及题目集合

    首先是我的酱油记了啦~: Xs的NOIP2014酱油记,持续更新中 知识点方面: noip知识点总结之--贪心 noip知识点总结之--线性筛法及其拓展 noip知识点总结之--欧几里得算法和扩展欧几 ...

  2. NOIP系列(续)

    马上就要告别noip了呢. 这道题大家都说dfs可过. 但是数据范围一眼状压啊. 首先假设点是有序的(选取有先后顺序),其实这并不影响什么,但是却省下大量的时间和代码长度. 然后状压,dp[i]表示状 ...

  3. c++stl应用入门

    在这篇中,我会讲几个简单易懂且比较常用的stl函数,这些函数在noip系列考试中往往被允许使用(既然让用我们自然不用手码了...) (末尾有惊喜!) 1.sort 绝大部分刚入门的oier第一个接触的 ...

  4. ACM-ICPC 训练平台 & 比赛 分析

    the file can download in https://pan.baidu.com/s/1HwoLFHGAG-boQbIn9xIhxA occ5 the article is also pu ...

  5. luoguP2679 子串

    luoguP2679 子串 个人感觉\(noip\)系列中挺好的一道DP题目. 题面有点难理解. 我们设\(f_{i,j,k,0/1}\)表示\(A\)串前\(i\)个字符,匹配\(B\)串前\(j\ ...

  6. noip推荐系列:遥控车[字符串+高精+二分答案]

    [问题描述] 平平带着韵韵来到了游乐园,看到了n辆漂亮的遥控车,每辆车上都有一个唯一的名字name[i].韵韵早就迫不及待地想玩名字是s的遥控车.可是韵韵毕竟还小,她想象的名字可能是一辆车名字的前缀( ...

  7. noip推荐系列:汽艇[贪心]

    [问题背景] 一天sxc,zsx,wl到gly坐汽艇,本来和其他的人约好了一起去,结果被放了鸽子,3人便只有一人负担x元去坐汽艇(很贵哦).坐了才发现如果汽艇上人多了位置就不宽敞,就不好玩了.而3个人 ...

  8. 【NOIP模拟赛】【数学真奇妙系列】纸盒子

    Task 1.纸盒子(box.pas/box.c/box.cpp) [题目描述] Mcx是一个有轻度洁癖的小朋友.有一天,当他沉溺于数学卷子难以自拔的时候,恍惚间想起在自己当初学习概率的时候准备的一堆 ...

  9. [日常] NOIP前集训日记

    写点流水账放松身心... 10.8 前一天考完NHEEE的一调考试终于可以开始集训了Orz (然后上来考试就迟到5min, GG) T1维护队列瞎贪心, 过了大样例交上去一点也不稳...T出翔只拿了5 ...

随机推荐

  1. hdu1517A Multiplication Game(巴什博弈变形)

    A Multiplication Game Time Limit: 5000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Ot ...

  2. Kotlin Android Extensions: 与 findViewById 说再见 (KAD 04) -- 更新版

    作者:Antonio Leiva 时间:Aug 16, 2017 原文链接:https://antonioleiva.com/kotlin-android-extensions/ 在 Kotlin1. ...

  3. SpriteKit在复制节点时留了一个巨坑给开发者,需要开发者手动把复制节点的isPaused设置为false

    根据When an overlay node with actions is copied there is currently a SpriteKit bug where the node’s is ...

  4. Python版本切换和Pip安装

    Python版本切换 现在常用的linux系统中都会默认携带python运行环境,在ubuntu 16.04 和centos 7.3中携带有Python 2.7 和Python3.5两个版本, 默认使 ...

  5. some Commands OF CONSOLE

    不可避免地使用console,一旦与电脑打交道:入口就是help,而很多行就直接过掉了,却不能看到需要的地方,在那里停下来,实际是需要使用more  less grep等 在windows中,使用di ...

  6. Python3 Tkinter-Toplevel

    1.创建 Toplevel与Frame类似,但是它包含窗体属性(如Title) from tkinter import * root=Tk() tl=Toplevel() Label(tl,text= ...

  7. net::ERR_ABORTED ,引入js文件出现报错的解决方法

    在head头里面添加 <mvc:annotation-driven enable-matrix-variables="true"></mvc:annotation ...

  8. wpa_supplicant之eloop_run分析

    部分内容转自http://blog.chinaunix.net/uid-20273473-id-3128151.html 重要结构体!!! struct eloop_sock { int sock; ...

  9. 如果jsp表单元素的值为空,如何避免null出现在页面上?

    可以写一个简单的函数对空值进行处理,判断值是否为空,如果是空就返回空字符串.实例代码如下: <%! String blanknull(String s) { return (s == null) ...

  10. Hadoop 版本 生态圈 MapReduce模型

    忘的差不多了, 先补概念, 然后开始搭建集群实战 ... . 一 Hadoop版本 和 生态圈 1. Hadoop版本 (1) Apache Hadoop版本介绍 Apache的开源项目开发流程 : ...