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 ...
随机推荐
- javascript常用对象方法
concat:连接产生一个新数组 [1,2].concat([3,4]) >> [1, 2, 3, 4] filter:返回符合条件的一个新数组 [1,2,3,4,5].filte ...
- 【20180808模拟测试】T2 k-斐波那契
描述 k-斐波拉契数列是这样的 f(0)=k;f(1)=k;f(n)=(f(n-1)+f(n-2))%P(n>=2); 现在我们已经知道了f(n)=1,和P: k的范围是[1,P); 求k的所有 ...
- solidity 十六进制字符串转十六进制bytes
pragma solidity ^0.4.16; contract Metadata { // 十六进制字符串转换成bytes function hexStr2bytes(string data)re ...
- Twaver的mono-desiner导出的json文件解析
以画的交换机为例,其他大概都差不多. 利用Twaver做出交换机模型如图1所示,其中,每一个端口都是一个单独的对象.具体Twaver操作流程参见网址:http://twaver.servasoft.c ...
- JavaScript筑基篇(二)->JavaScript数据类型
说明 介绍JavaScript数据类型 目录 前言 参考来源 前置技术要求 JavaScript的6种数据类型 哪6种数据类型 undefined 类型 null 类型 boolean 类型 numb ...
- Notes of the scrum meeting before publishing(12.17)
meeting time:18:30~20:30p.m.,December 17th,2013 meeting place:3号公寓一层 attendees: 顾育豪 ...
- oracle数据库之PL/SQL 流程控制语句
介绍 PL/SQL 的流程控制语句, 包括如下三类: 1.控制语句: IF 语句 2.循环语句: LOOP 语句, EXIT 语句 3.顺序语句: GOTO 语句, NULL 语句 一 条件语句 IF ...
- 【IdentityServer4文档】- 支持协议
IdentityServer 实现了以下协议: OpenID Connect OpenID Connect Core 1.0 (spec) OpenID Connect Discovery 1.0 ( ...
- JAVA mysql数据库 配置
mysql 版本 5.7 数据库连接版本 <!--MySql--><dependency> <groupId>mysql</groupId> <a ...
- android入门 — ListView的优化
ListView的运行效率是比较低的,因为在getView()中每次都会将整个布局重新加载一遍,当ListView快速滚动的时候就会成为性能瓶颈. 调用View中的findViewById()方法获取 ...