完美退役。。。说好的不卡常呢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 提高组 解题报告的更多相关文章

  1. Noip2015提高组解题报告

    Day1 T1神奇的幻方 一道简单异常的小模拟,我们只需要确定数字1的位置,然后根据题意枚举即可,简简单单就A了,什么也不卡. 然而这题,我刚开始学OI的时候,因为当时比较蠢,被这题花式吊打啊.... ...

  2. NOIP2016提高组解题报告

    NOIP2016提高组解题报告 更正:NOIP day1 T2天天爱跑步 解题思路见代码. NOIP2016代码整合

  3. noip2009提高组解题报告

    NOIP2009潜伏者 题目描述 R 国和S 国正陷入战火之中,双方都互派间谍,潜入对方内部,伺机行动. 历尽艰险后,潜伏于 S 国的R 国间谍小C 终于摸清了S 国军用密码的编码规则: 1. S 国 ...

  4. 2010noip提高组解题报告

    https://www.luogu.org/problem/show?pid=1514 题目描述 在一个遥远的国度,一侧是风景秀美的湖泊,另一侧则是漫无边际的沙漠.该国的行政区划十分特殊,刚好构成一个 ...

  5. 洛谷 P2678 & [NOIP2015提高组] 跳石头

    题目链接 https://www.luogu.org/problemnew/show/P2678 题目背景 一年一度的“跳石头”比赛又要开始了! 题目描述 这项比赛将在一条笔直的河道中进行,河道中分布 ...

  6. [NOIP2015] 提高组 洛谷P2615 神奇的幻方

    题目描述 幻方是一种很神奇的N*N矩阵:它由数字1,2,3,……,N*N构成,且每行.每列及两条对角线上的数字之和都相同. 当N为奇数时,我们可以通过以下方法构建一个幻方: 首先将1写在第一行的中间. ...

  7. 洛谷-神奇的幻方-NOIP2015提高组复赛

    题目描述 幻方是一种很神奇的N*N矩阵:它由数字1,2,3,--,N*N构成,且每行.每列及两条对角线上的数字之和都相同. 当N为奇数时,我们可以通过以下方法构建一个幻方: 首先将1写在第一行的中间. ...

  8. 【数据结构】运输计划 NOIP2015提高组D2T3

    [数据结构]运输计划 NOIP2015提高组D2T3 >>>>题目 [题目描述] 公元 2044 年,人类进入了宇宙纪元.L 国有 n 个星球,还有 n−1 条双向航道,每条航 ...

  9. 【二分查找】 跳石头NOIP2015提高组 D2T1

    [二分查找]跳石头NOIP2015提高组 D2T1 >>>>题目 [题目描述] 一年一度的“跳石头”比赛又要开始了! 这项比赛将在一条笔直的河道中进行,河道中分布着一些巨大岩石 ...

随机推荐

  1. HTTP之URL分解

    HTTP使用统一资源标识符(Uniform Resource Identifiers, URI)来传输数据和建立连接.URL是一种特殊类型的URI,包含了用于查找某个资源的足够的信息 URL,全称是U ...

  2. 每周.NET前沿技术文章摘要(2017-06-07)

    汇总国外.NET社区相关文章,覆盖.NET ,ASP.NET等内容: .NET .NET Core and .NET Framework Working Together, Or: The Magic ...

  3. js代码细嚼慢咽

    全局变量的梗 例1: 对于var 的理解:将该变量声明在当前的作用域中,或者说执行上下文中. function add() { result = 3; //result变量即是隐喻全局变量 } add ...

  4. 优化css选择器

    1.css选择器效率排行从高到低如下: id选择器(#head) 类选择器(.content) 标签选择器(p,h1) 相邻选择器(h1+p) 子选择器(ul < li)

  5. Apache Avro# 1.8.2 Specification (Avro 1.8.2规范)二

    h5 { text-indent: 0.71cm; margin-top: 0.49cm; margin-bottom: 0.51cm; direction: ltr; color: #000000; ...

  6. JAVA本地环境启动OOM问题排查

    1.问题描述 每次启动信息报错如下: 2.排查过程 2.1起初怀疑是堆内存不够: 将本地队内存调整由-Xms512M,-Xmx1024M,改成与测试环境相同1536M,还是失败 如上图报错中有noti ...

  7. Kafka的基本概念与安装指南(单机+集群同步)

    最近在搞spark streaming,很自然的前端对接的就是kafka.不过在kafka的使用中还是遇到一些问题,比如mirrormaker莫名其妙的丢失数据[原因稍后再说],消费数据offset错 ...

  8. xampp的安装和配置

    这几天一直在做一个网站,客户要求要用PHP修改WordPress的themes,目的是交付完成后,客户自己管理方便. 以前从没有涉及过PHP,用的是jsp,但是,既然已经选择接受,就只能让自己去适应客 ...

  9. [js高手之路]原型式继承与寄生式继承

    一.原型式继承本质其实就是个浅拷贝,以一个对象为模板复制出新的对象 function object( o ){ var G = function(){}; G.prototype = o; retur ...

  10. Effective Java 第三版——17. 最小化可变性

    Tips <Effective Java, Third Edition>一书英文版已经出版,这本书的第二版想必很多人都读过,号称Java四大名著之一,不过第二版2009年出版,到现在已经将 ...