noip2015 提高组 解题报告
完美退役。。。说好的不卡常呢QAQ
day1:
T1:模拟题?。。考察选手将题目描述翻译成代码的能力233
//其实真相是考验rp。。论代码雷同的危害233
T2:简单图论,每个点出度为1所以是基环内向树(可能很多棵),要求出最短的环的长度
各种做法应该都行吧。。可以强上tarjan或者是裸搜时注意一下走过的点别走了或者是拓扑排序?。。。都是O(n)
T3:丧病模拟?注意一下姿势就可过吧(然而考场上整个人都傻逼了
目前见过的最快的做法就是开个数组存一下每种牌有多少张(花色实际没影响)然后强上dfs。。。
先试顺子或者是四带二这些出牌数多的(感觉优先顺子的话很可能不是最优解然而腾爷实力2ms打脸)
如果没把同花色的弄到一起的话可能会导致判断能不能出牌的时候耗时过多。。。可以开个2^n的数组记忆化一下(uoj数据去掉记忆化就从85掉到25了= =)。。结果就是初始化超时233
注意K后面可以连1啊什么的(按照数码大小)。。还有就是大王和小王不算一对(数码大小不同)
会打QQ斗地主的都惹不起。。。
day2:
T1:二分答案。。。。USACO银组题。。。。
唯一的区别就是现在终点的石子不能挪走(银组题没说这个
原来现在CCF是先把USACO的题抄到自家OJ上再抄到NOIP里面的啊。。真是用心良苦(喷
T2:简单DP。。。f[i][j][k]表示从A串前i个字符中取出j段,去对应B串中前k个字符的方案数(要不要强制i字符一定选这个随意。。)
正常解法是对于每个A串中的字符考虑一下是并到上一段还是开一个新段。。。(前提是A[i]==B[k])
f[i][j][k]=f[i-x][j][k-x]+f[i-1][j-1][k-1](A[i-x.....i]与B[k-x......k]相等),然后x那里前缀和一下就好了
然而4kw个int会爆空间QAQ。。。所以j那一维滚动一下保平安。。。
考场上傻逼写了个常数巨大的写法= =。。。然后为了压一下常数就改成滚动的了。。。自始至终没想过会爆空间QAQ。。然而目测正式测试最后一个点会被卡常
听说uoj上得跑500ms内北航老爷机(听说是?)上才能过= =
T3:
其实发现还是挺水的?QAQ。。考场上果断暴力+开rand贪心= =
用各种方法求出每条路径的长度,再降序排序。。
首先被弄成0的边一定是最长路径上的边(不然对答案没贡献),但又不一定是最长路径上最长的边,因为可能弄完就不是最长路径了。。
假如弄掉最长路径上最长的那条边,此时答案就是max(dis[1]-最长边权值,dis[2])。。。(dis[i]表示第i长路径长度)
所以我们对前i长的路径求交,再删去交集中最长的边,答案是max(dis[1]-交集中最长边权值,dis[i+1])。。。
至于快速求交。。。随便搞?(逃。。反正我只是嘴巴选手
树上的两条路径的交集一定是连续的一段。。所以直接把最长路径扒下来,然后每次求交时判断 当前那段交集的两端的边是否在新枚举的路径 上就好了。。
对于一条边(u,v)(u是v的父亲),如果路径有一个端点在v子树里,并且另一个端点在v子树外,那么这条边就在路径上
维护最大值的话按边权排序的时候记录一下每条边原来的位置,每次把已被踢出交集的最长边去掉就好了= =。。。
总复杂度是O(nlogn)。。。就是求路径长度和排序那块。。。后面的操作都是O(n)的
应该是可以过的。。。吧?(逃
想了想还是把在UOJ上能过的代码扔上来吧。当然要是在noip的老爷机上测的话还是会TLE的
#include<cstdio>
#include<iostream>
#include<algorithm>
#include<cstring>
#define ll long long
using namespace std;
const int maxn=;
struct zs{
int too,pre;
short dis;
}e[maxn<<];
struct zs1{
int st,ed;
ll dis;
}a[maxn];
struct zs2{
int pos;ll dis;
}b[maxn];
int tot,last[maxn],dep[maxn],bii[maxn],size[maxn],fae[maxn],pos[maxn];
int fa[maxn][];
int i,j,k,n,m,aa,bb,cc,tmp,tim;
int dl[maxn],l,r,top;
char rx;int rans;
ll ans;
ll dis[maxn];
inline void insert(int a,int b,int c){
e[++tot].too=b;e[tot].dis=c;e[tot].pre=last[a];last[a]=tot;
e[++tot].too=a;e[tot].dis=c;e[tot].pre=last[b];last[b]=tot;
}
inline int read(){
rx=getchar();rans=;
while(rx<''||rx>'')rx=getchar();
while(rx>=''&&rx<='')rans*=,rans+=rx-,rx=getchar();return rans;
}
void dfs(int x,int pre){
dep[x]=dep[pre]+;bii[x]=bii[pre];size[x]=;pos[x]=++tim;
if((dep[x]&(-dep[x]))==dep[x])bii[x]++;
int i;
for(i=;i<=bii[x];i++)fa[x][i]=fa[fa[x][i-]][i-];
for(i=last[x];i;i=e[i].pre)if(e[i].too!=pre){
fa[e[i].too][]=x;dis[e[i].too]=dis[x]+e[i].dis;
fae[e[i].too]=i;
dfs(e[i].too,x);
size[x]+=size[e[i].too];
}
}
int lca(int a,int b){
if(dep[a]<dep[b])swap(a,b);short i;
for(i=bii[a];i>=;i--)if(dep[fa[a][i]]>=dep[b])a=fa[a][i];
if(a!=b){
for(i=bii[a];i>=;i--)if(fa[a][i]!=fa[b][i])a=fa[a][i],b=fa[b][i];
a=fa[a][];
}
return a;
}
inline bool onroute(int st,int ed,int num){
int u=e[num].too,v=e[((num-)^)+].too;
if(fa[u][]==v)swap(u,v); return (pos[v]<=pos[ed]&&pos[v]+size[v]>pos[ed]) ^ (pos[v]<=pos[st]&&pos[v]+size[v]>pos[st]);
}
bool cmp(zs1 a,zs1 b){
return a.dis>b.dis;
}
bool cmp1(zs2 a,zs2 b){
return a.dis>b.dis;
}
int main(){
n=read();m=read();
for(i=;i<n;i++)aa=read(),bb=read(),cc=read(),insert(aa,bb,cc);
bii[]=-;
dfs(,);
for(i=;i<=m;i++){
a[i].st=read();a[i].ed=read();cc=lca(a[i].st,a[i].ed);
a[i].dis=dis[a[i].st]+dis[a[i].ed]-(dis[cc]<<);
}
sort(a+,a++m,cmp);
aa=a[].st;bb=a[].ed;cc=lca(aa,bb);
while(aa!=cc)dl[++r]=fae[aa],aa=fa[aa][];tmp=r;
while(bb!=cc)dl[++tmp]=fae[bb],bb=fa[bb][];
for(i=r+;i<=r+(tmp-r)/;i++)swap(dl[i],dl[tmp-i+r+]);r=tmp;
for(i=;i<=r;i++)b[i].pos=i,b[i].dis=e[dl[i]].dis;
sort(b+,b++r,cmp1);
l=;top=;
// for(i=l;i<=r;i++)printf(" %d--%d:%d \n",e[dl[i]].too,e[((dl[i]-1)^1)+1].too,e[dl[i]].dis);
ans=max(a[].dis-b[].dis,a[].dis);
for(i=;i<=m&&l<=r;i++){
while(l<=r&&!onroute(a[i].st,a[i].ed,dl[r]))r--;
while(l<=r&&!onroute(a[i].st,a[i].ed,dl[l]))l++;
// for(j=l;j<=r;j++)printf(" %d--%d:%d \n",e[dl[j]].too,e[((dl[j]-1)^1)+1].too,e[dl[j]].dis); while(top<=tmp&&(b[top].pos<l||b[top].pos>r))top++;
ans=min(ans,max(a[].dis-b[top].dis,a[i+].dis));
}
printf("%lld\n",ans);
return ;
}
UPD:事实证明还是被卡了QAQ。。uoj极限数据要700+ms。。然后时间复杂度主要跪在求lca上了。。。所以也许换成tarjan就行了。。吧。。sort倒是没什么影响TAT
所以说今年noip用到最高级的东西就是求lca么。。。。老板给我来一打刀片吧TAT
noip2015 提高组 解题报告的更多相关文章
- Noip2015提高组解题报告
Day1 T1神奇的幻方 一道简单异常的小模拟,我们只需要确定数字1的位置,然后根据题意枚举即可,简简单单就A了,什么也不卡. 然而这题,我刚开始学OI的时候,因为当时比较蠢,被这题花式吊打啊.... ...
- NOIP2016提高组解题报告
NOIP2016提高组解题报告 更正:NOIP day1 T2天天爱跑步 解题思路见代码. NOIP2016代码整合
- noip2009提高组解题报告
NOIP2009潜伏者 题目描述 R 国和S 国正陷入战火之中,双方都互派间谍,潜入对方内部,伺机行动. 历尽艰险后,潜伏于 S 国的R 国间谍小C 终于摸清了S 国军用密码的编码规则: 1. S 国 ...
- 2010noip提高组解题报告
https://www.luogu.org/problem/show?pid=1514 题目描述 在一个遥远的国度,一侧是风景秀美的湖泊,另一侧则是漫无边际的沙漠.该国的行政区划十分特殊,刚好构成一个 ...
- 洛谷 P2678 & [NOIP2015提高组] 跳石头
题目链接 https://www.luogu.org/problemnew/show/P2678 题目背景 一年一度的“跳石头”比赛又要开始了! 题目描述 这项比赛将在一条笔直的河道中进行,河道中分布 ...
- [NOIP2015] 提高组 洛谷P2615 神奇的幻方
题目描述 幻方是一种很神奇的N*N矩阵:它由数字1,2,3,……,N*N构成,且每行.每列及两条对角线上的数字之和都相同. 当N为奇数时,我们可以通过以下方法构建一个幻方: 首先将1写在第一行的中间. ...
- 洛谷-神奇的幻方-NOIP2015提高组复赛
题目描述 幻方是一种很神奇的N*N矩阵:它由数字1,2,3,--,N*N构成,且每行.每列及两条对角线上的数字之和都相同. 当N为奇数时,我们可以通过以下方法构建一个幻方: 首先将1写在第一行的中间. ...
- 【数据结构】运输计划 NOIP2015提高组D2T3
[数据结构]运输计划 NOIP2015提高组D2T3 >>>>题目 [题目描述] 公元 2044 年,人类进入了宇宙纪元.L 国有 n 个星球,还有 n−1 条双向航道,每条航 ...
- 【二分查找】 跳石头NOIP2015提高组 D2T1
[二分查找]跳石头NOIP2015提高组 D2T1 >>>>题目 [题目描述] 一年一度的“跳石头”比赛又要开始了! 这项比赛将在一条笔直的河道中进行,河道中分布着一些巨大岩石 ...
随机推荐
- DataBase MongoDB高级知识-易扩展
MongoDB高级知识-易扩展 应用程序数据集的大小正在以不可思议的速度增长.随着可用宽带的增长和存储器价格的下跌,即使是一个小规模的应用程序,需要存储的数据也可能大的惊人,甚至超出了很多数据库的处理 ...
- Core Erlang:Erlang的Core中间表示
随着erlang的不断发展,它的语法越来越复杂,不便于诸如分析器,调试器此类程序在源码层次直接进行解析,而CORE Erlang旨在为Erlang提供一个人类可读可改的中间表示(Intermediat ...
- Linux 学习记录 二 (文件的打包压缩).
前言:本文参考<鸟哥的Linux 私房菜>,如有说的不对的地方,还请指正!谢谢! 环境:Centos 6.4 和window不同,在Linux压缩文件需要注意的是,压缩后的文件会 ...
- 453. Minimum Moves to Equal Array Elements
Given anon-emptyinteger array of sizen, find the minimum number of moves required to make all array ...
- ASP.NET Core文件上传与下载(多种上传方式)
前言 前段时间项目上线,实在太忙,最近终于开始可以研究研究ASP.NET Core了. 打算写个系列,但是还没想好目录,今天先来一篇,后面在整理吧. ASP.NET Core 2.0 发展到现在,已经 ...
- 图解JQUERY尺寸及位置定义
最近在学习JQUERY的一些应用,接触到了JQUERY对于元素尺寸及位置定义,还有就是配合浏览器尺 寸及状态的计算所做出的一些动画特效.其实像这类JQUERY应用无外乎涉及这些属性的调用:innerH ...
- 中文代码示例之Vuejs入门教程(一)
原址: https://zhuanlan.zhihu.com/p/30917346 为了检验中文命名在主流框架中的支持程度, 在vuejs官方入门教程第一部分的示例代码中尽量使用了中文命名. 所有演示 ...
- 启用composer镜像服务
使用composer下载东西,需要FQ时,可使用其镜像服务 安装composer后,命令行执行全局配置 composer config -g repo.packagist composer https ...
- 关于 const 的一点小研究
在饱受 var 的折磨之后,ES6 终于推出了新的定义变量的方法:let 和 const 和 var 相比,let 和 const 有了自己的作用域,let 用于定义变量,而 const 用于定义常量 ...
- JSP EL隐含对象
JSP 内置对象 JSP EL隐含对象 描述 page pageScope page 作用域 request requestScope request 作用域 session sessionScope ...