肝了两题...

  T1一眼题,分解质因数,找出2的个数和5的个数取min输出

#include<iostream>
#include<cstring>
#include<cstdlib>
#include<cstdio>
#include<algorithm>
#define ll long long
using namespace std;
const int maxn=,inf=1e9;
int n,m,T;
int fac2[maxn],fac5[maxn];
void read(int &k)
{
int f=;k=;char c=getchar();
while(c<''||c>'')c=='-'&&(f=-),c=getchar();
while(c<=''&&c>='')k=k*+c-'',c=getchar();
k*=f;
}
int main()
{
freopen("zero.in","r",stdin);
freopen("zero.out","w",stdout);
read(T);
for(int i=;i<=;i++)
{
int x=i;fac2[i]=fac2[i-];fac5[i]=fac5[i-];
for(;(x&)==;x>>=)fac2[i]++;
for(;x%==;x/=)fac5[i]++;
}
while(T--)
{
read(m);read(n);
int cnt2=fac2[m]-fac2[n]-fac2[m-n];
int cnt5=fac5[m]-fac5[n]-fac5[m-n];
printf("%d\n",min(cnt2,cnt5));
}
return ;
}

  T2是个环套树题

  分三类:①两个点都在同个树上,求直径,两次bfs或者树形DP即可

      ②一个点在环上一个点在树上,答案为最大深度dep+len/2

      ③两个点在不同的树上,即求max(depi+depj+dis(i,j)),而dis(i,j)显然是<=len/2且递增的,用单调队列维护max(depj+dis(i,j)),队头与i距离超过len/2就出队,走一圈之后就可以算出这种情况的答案

  三类取max

#include<iostream>
#include<cstring>
#include<cstdlib>
#include<cstdio>
#include<algorithm>
#define ll long long
using namespace std;
const int maxn=,inf=1e9;
struct poi{int too,pre;}e[maxn];
int n,m,x,y,z,tot,ans,st,ed,cnt,len;
int mx1[maxn],mx2[maxn],d[maxn],last[maxn],isrt[maxn],rt[maxn],q[maxn];
void read(int &k)
{
int f=;k=;char c=getchar();
while(c<''||c>'')c=='-'&&(f=-),c=getchar();
while(c<=''&&c>='')k=k*+c-'',c=getchar();
k*=f;
}
inline void add(int x,int y){e[++tot].too=y;e[tot].pre=last[x];last[x]=tot;}
void dfs(int x,int fa)
{
d[x]=d[fa]+;mx1[x]=d[x];mx2[x]=;
for(int i=last[x];i;i=e[i].pre)
if(e[i].too!=fa&&!isrt[e[i].too])
{
dfs(e[i].too,x);
if(mx1[e[i].too]>mx1[x])mx2[x]=mx1[x],mx1[x]=mx1[e[i].too];
else if(mx1[e[i].too]>mx2[x])mx2[x]=mx1[e[i].too];
}
ans=max(ans,mx1[x]+mx2[x]-(d[x]<<));
}
int dfs2(int x,int fa)
{
if(x==ed)return len++,;
for(int i=last[x];i;i=e[i].pre)
if(e[i].too!=fa)if(dfs2(e[i].too,x))
return rt[++cnt]=x,isrt[x]=,len++,;
return ;
}
inline int dis(int x,int y){if(x>=y)return x-y;return len-(y-x);}
inline void work()
{
int l=,r=;
for(int i=(len>>);i;q[++r]=i,i--)
while(l<=r&&mx1[rt[q[r]]]+dis(q[r],cnt)<=mx1[rt[i]]+dis(i,cnt))r--;
for(int i=cnt;i;i--)
{
while(l<=r&&(dis(q[l],i)>(len>>)||q[l]==i))l++;
ans=max(ans,mx1[rt[i]]+mx1[rt[q[l]]]+dis(q[l],i));
while(l<=r&&mx1[rt[q[r]]]+dis(q[r],i)<=mx1[rt[i]])r--;
q[++r]=i;
}
}
int main()
{
freopen("road.in","r",stdin);
freopen("road.out","w",stdout);
read(n);read(m);
for(int i=;i<n;i++)read(x),read(y),add(x,y),add(y,x);
for(int i=;i<=m;i++)
{
read(st);read(ed);ans=len=cnt=;
memset(isrt,,sizeof(isrt));d[]=-;
rt[++cnt]=ed;isrt[ed]=;dfs2(st,);
for(int j=;j<=cnt;j++)dfs(rt[j],),ans=max(ans,mx1[rt[j]]+(len>>));
work();printf("%d\n",ans);
}
return ;
}

NOIP2017金秋冲刺训练营杯联赛模拟大奖赛第二轮Day2题解的更多相关文章

  1. NOIP2017金秋冲刺训练营杯联赛模拟大奖赛第一轮Day2题解

    上星期打的...题有点水,好多人都AK了 T1排个序贪心就好了 #include<iostream> #include<cstring> #include<cstdlib ...

  2. 【前行】◇第3站◇ 国庆训练营·OI制模拟赛

    [第3站] 国庆训练营·OI制模拟赛Ⅰ 怀着冲刺提高组400的愿望来到这个very small but very interesting 的训练营QwQ 在北大dalao的带领下开始了第一场OI模拟赛 ...

  3. 队爷的讲学计划 CH Round #59 - OrzCC杯NOIP模拟赛day1

    题目:http://ch.ezoj.tk/contest/CH%20Round%20%2359%20-%20OrzCC杯NOIP模拟赛day1/队爷的讲学计划 题解:刚开始理解题意理解了好半天,然后发 ...

  4. 队爷的Au Plan CH Round #59 - OrzCC杯NOIP模拟赛day1

    题目:http://ch.ezoj.tk/contest/CH%20Round%20%2359%20-%20OrzCC杯NOIP模拟赛day1/队爷的Au%20Plan 题解:看了题之后觉得肯定是DP ...

  5. 队爷的新书 CH Round #59 - OrzCC杯NOIP模拟赛day1

    题目:http://ch.ezoj.tk/contest/CH%20Round%20%2359%20-%20OrzCC杯NOIP模拟赛day1/队爷的新书 题解:看到这题就想到了 poetize 的封 ...

  6. CH Round #58 - OrzCC杯noip模拟赛day2

    A:颜色问题 题目:http://ch.ezoj.tk/contest/CH%20Round%20%2358%20-%20OrzCC杯noip模拟赛day2/颜色问题 题解:算一下每个仆人到它的目的地 ...

  7. Java 第十一届 蓝桥杯 省模拟赛 小明的城堡

    小明用积木搭了一个城堡. 为了方便,小明在搭的时候用的是一样大小的正方体积本,搭在了一个 n 行 m 列的方格图上,每个积木正好占据方格图的一个小方格. 当然,小明的城堡并不是平面的,而是立体的.小明 ...

  8. Java 第十一届 蓝桥杯 省模拟赛 梅花桩

    小明每天都要练功,练功中的重要一项是梅花桩. 小明练功的梅花桩排列成 n 行 m 列,相邻两行的距离为 1,相邻两列的距离也为 1. 小明站在第 1 行第 1 列上,他要走到第 n 行第 m 列上.小 ...

  9. Java 第十一届 蓝桥杯 省模拟赛 元音字母辅音字母的数量

    给定一个单词,请计算这个单词中有多少个元音字母,多少个辅音字母. 元音字母包括 a, e, i, o, u,共五个,其他均为辅音字母. 输入格式 输入一行,包含一个单词,单词中只包含小写英文字母. 输 ...

随机推荐

  1. HDU - 6409:没有兄弟的舞会(数学+思维)

    链接:HDU - 6409:没有兄弟的舞会 题意: 题解: 求出最大的 l[i] 的最大值 L 和 r[i] 的最大值 R,那么 h 一定在 [L, R] 中.枚举每一个最大值,那么每一个区间的对于答 ...

  2. Attention注意力机制介绍

    什么是Attention机制 Attention机制通俗的讲就是把注意力集中放在重要的点上,而忽略其他不重要的因素.其中重要程度的判断取决于应用场景,拿个现实生活中的例子,比如1000个人眼中有100 ...

  3. react和vue的区别

    1.数据改变的方式 react是通过setState来改变数据,然后重走组件的渲染过程.而vue是通过Object.defineProperty和watcher来显示响应式的数据,所以数据的改变是直接 ...

  4. CVPR-2018 那些有趣的新想法

    Taylor Guo @ Shanghai - 2018.10.18 缘起 还有什么比顶级会议更适合寻找有趣新想法的地方吗?我们从CVPR 2018 计算机视觉和模式识别的顶级会议中发现了很多有趣的东 ...

  5. 图的遍历——DFS(邻接矩阵)

    递归 + 标记 一个连通图只要DFS一次,即可打印所有的点. #include <iostream> #include <cstdio> #include <cstdli ...

  6. Thunder团队第六周 - Scrum会议2

    Scrum会议2 小组名称:Thunder 项目名称:i阅app Scrum Master:宋雨 工作照片: 参会成员: 王航:http://www.cnblogs.com/wangh013/ 李传康 ...

  7. Thunder团队贡献分分配规则

    规则1:基础分,拿出总分的40%进行均分. 规则2:参与会议者,每人次加0.5分. 规则3:积极贡献者,通过团队投票,半数及以上同意,每次加0.5分. 规则4:根据项目完成情况,核实每个人的工作量,投 ...

  8. Git 命令基本应用

    两种建立仓库的方法: (1)在本地文件路径下建立仓库:git init (2)在代码托管网站上克隆项目:git clone [url] 查看该分支下的文件情况:git status 添加远程仓库源:g ...

  9. Coursera:Internet History ,Techornology and Security

    WEEK1 War Time Computing and Communication Bletchley Park 布莱彻利庄园:a top-secret code breaking effort b ...

  10. 团队第一次作业 ——404 Note Found 团队

    如果记忆是一个罐头的话,我希望这一罐罐头不会过期----<重庆森林> 404 Note Found Team 如果记忆是一个备忘录的话,别说了,它不会过期----<404 Note ...