完美退役。。。说好的不卡常呢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. Office 365实现单点登录系列(1)—域环境搭建

    Hello 小伙伴们, 2018新年快乐,作为2018年首篇文章,怎么能不给大家带来点干货呢?这篇文章其实我9月底的时候已经在MSDN上发布过了,为表诚意,我更新了这篇文章,并把它组成了一个系列,2. ...

  2. Java之路第一步——第一行Java代码

    main()方法是Java应用程序的入口方法,也就是说,程序在运行的时候,第一个执行的方法就是main()方法. 名字必须是main: 必须是public static void 类型的: 必须接收一 ...

  3. cd 命令详解

    cd 命令 作用:  cd 用来切换目录,目录表示法可为绝对路径或相对路径, 若目录名称省略,则变换至使用者的登陆目录. ~ 可表示为家目录,.为当前目录,..为上级目录 语法: cd (选项)(参数 ...

  4. Golang 网络爬虫框架gocolly/colly 二 jQuery selector

    Golang 网络爬虫框架gocolly/colly 二 jQuery selector colly框架依赖goquery库,goquery将jQuery的语法和特性引入到了go语言中.如果要灵活自如 ...

  5. Java_Date_01_判断两个时间相差的天数

    二.参考资料 1.java 判断两个时间相差的天数 2.java计算两个日期之间相差天数和相隔天数详解

  6. input上传图片(file),预览图片的两种方法。blob与base64编码

    上传图片时一般都需要预览,我一般用这两种方法来实现.base64编码可以直接上传到后台,后台解析下,得到的文件就会比较小了,省去了压缩图片这一步了. //获取对象input file 的图片地址,放进 ...

  7. python爬虫——建立IP池,将可用IP存放到redis

    直接上代码,每行代码后面都有注释 import urllib.request import urllib import re import time import random import sock ...

  8. 搭建非域AlwaysOn win2016+SQL2016

    搭建非域AlwaysOn win2016+SQL2016 第一篇http://www.cnblogs.com/lyhabc/p/4678330.html第二篇http://www.cnblogs.co ...

  9. 使用svn 的解决 处理svn状态冲突

    当直接只用版本浏览器进行svn的删除操作是,在客户端svn目录里,出现svn版本错误信息提示,使用 svn 解决命令,处理冲突保存 svn resolve --accept=working PATH( ...

  10. TurnipBit:DIY音乐盒教程实例

    一款可以自己DIY的音乐盒,要什么曲子,就自己谱曲啦!为他(她)制作一首他喜欢的音乐,来代表您的心意,也可以让他自己来制作他最爱的音乐哦!更可以带孩子一起体验谱写欢快的音乐. 最近发现一很好玩的中国式 ...