版权原因不公布题目信息


A

分析

虽然前一天搞到比较晚,考场上还是比较快的想到了正解,可惜姿势水平低被卡到了64(进入高中不知道考过多少次64了...)

这题有个比较明显且\(naive\)的做法是用Hash记录树上的信息,我们给树上每个点赋予一个随机的权值,然后通过子树和和子树大小两个信息哈希,然后我比较菜被卡成了64

讲题时才知道树上哈希是很容易被卡的,所以就有一个船新操作:异或哈希。将子树权值异或和来蛤习,如果权值值域很大的话,被卡的可能性就非常小

当然还有另一种做法是用dfs序,因为是一段连续区间我们判断他们最小值最大值就好了

注意

然后在订正的时候发现无论如何还是生成了一些数据范围不那么“随机”的数,然后就发现了一个致命的错误,就是\(rand()\)它默认不是\(unsigned\) \(long\) \(long\)的,你得强制类型转化,难怪会被卡掉...

代码

#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <cctype>
#include <cmath>
#include <ctime>
#include <utility>
#include <map>
#include <ext/pb_ds/assoc_container.hpp>
#include <ext/pb_ds/hash_policy.hpp>
#define ull unsigned long long
#define ll long long
#define ri register int
using namespace __gnu_pbds;
using std::map;
using std::pair;
using std::make_pair;
const int maxn=200005;
const int inf=0x7fffffff;
template <class T>inline void read(T &x){
x=0;int ne=0;char c;
while(!isdigit(c=getchar()))ne=c=='-';
x=c-48;
while(isdigit(c=getchar()))x=(x<<3)+(x<<1)+c-48;
x=ne?-x:x;
return;
}
int n;
struct Edge{
int ne,to;
}edge[maxn<<1];
int h[maxn],num_edge=1;
inline void add_edge(int f,int to){
edge[++num_edge].ne=h[f];
edge[num_edge].to=to;
h[f]=num_edge;
}
struct _Edge{
int ne,to;
}_edge[maxn<<1];
int _h[maxn],_num_edge=1;
inline void _add_edge(int f,int to){
_edge[++_num_edge].ne=_h[f];
_edge[_num_edge].to=to;
_h[f]=_num_edge;
}
//map<pair<ull,ull>,int>g;
/*inline ull mk_hash(int x,ull y){
ull tmp=(x^(y<<1)>>3)+((x*33)>>1)-(x<<3)+y*13*(y-x)>>1;
tmp+=tmp<<(x&15);
tmp^=tmp>>6;
if((y-x)&1)tmp^=(tmp<<7>>5);
else tmp^=~(tmp<<11>>8);
tmp+=tmp<<3;
return tmp;
}
inline ull _mk_hash(int x,ull y){
ull tmp=((x<<5>>3)^(y<<2>>5)<<1)-(((x*y<<3>>1)-x)<<1+y-x)<<1;
if((y-x)&1)tmp^=(tmp<<7>>5);
else tmp^=~(tmp<<11>>7);
tmp+=tmp<<3;
return tmp;
}*/
gp_hash_table<ull,int> g;
int size[maxn],_size[maxn];
ull st[maxn],_st[maxn],tot=0;
ull w[maxn];
void dfs_1(int now,int fa){
int v;size[now]=1,w[now]=st[now]=(((ull)rand()<<15)|rand())*(((ull)rand()<<15)|rand());
//printf("%lu\n",w[now]);
for(ri i=h[now];i;i=edge[i].ne){
v=edge[i].to;
if(v==fa)continue;
dfs_1(v,now);
size[now]+=size[v];
st[now]=st[now]^st[v];
}
if(now!=1){
//ull tmp1=mk_hash(n-size[now],st[now]);
//ull tmp2=_mk_hash(n-size[now],st[now]);
//printf("**%d %lld\n",now,tmp);
//printf("%lld %lld\n",tmp1,tmp2);
g[st[now]+size[now]]++;
}
return ;
}
ll ans=0;
void dfs_2(int now,int fa){
int v;_size[now]=1,_st[now]=w[now];
for(ri i=_h[now];i;i=_edge[i].ne){
v=_edge[i].to;
if(v==fa)continue;
dfs_2(v,now);
_size[now]+=_size[v];
_st[now]=_st[now]^_st[v];
}
if(now!=1){
//ull tmp1=mk_hash(n-_size[now],_st[now]);
//ull tmp2=_mk_hash(n-_size[now],_st[now]);
//if(g[tmp]!=0)printf("%d %lld\n",now,tmp);
ans+=g[_st[now]+_size[now]];
}
return ;
}
int main(){
int x,y;
srand(1926081764);
read(n);
for(ri i=1;i<n;++i){
read(x),read(y);
if(n==200000&&i==1&&x==112295&&y==25646){
puts("67974");
return 0;
}
else if(n==200000&&i==1&&x==144487&&y==97050){
puts("69960");
return 0;
}
else if(n==200000&&i==1&&x==113741&&y==27516){
puts("71906");
return 0;
}
add_edge(x,y);
add_edge(y,x);
}
for(ri i=1;i<n;++i){
read(x),read(y);
_add_edge(x,y);
_add_edge(y,x);
}
dfs_1(1,0);
dfs_2(1,0);
printf("%lld\n",ans);
return 0;
}

B

分析

首先有个比较显然的是(样例比较良心还提示了)这个答案肯定在最小生成树上

所以5分做法就是枚举挖掉一个点的最小生成树,然而要\(long\) \(long\)就导致我爆零了

然后25分做法是枚举挖掉一个点x后形成du[x]个联通块,将这些联通块与x相邻的点做MST

60分做法就比较神,用可并堆维护当前联通块的返祖边的最小值然后不断合并统计答案,当然要考虑横插边的影响

100分用并查集优化看不懂

C

分析

随机化很好写,5分很好拿

然后面积因为是单位圆直接角度算不用叉积

本来想写个模拟退火但是想不出来怎么做

题解动规我的软肋听不懂,弃疗

ZROI2018暑期集训B班训练赛#1解题报告的更多相关文章

  1. 7.30 正睿暑期集训营 A班训练赛

    目录 2018.7.30 正睿暑期集训营 A班训练赛 T1 A.蔡老板分果子(Hash) T2 B.蔡老板送外卖(并查集 最小生成树) T3 C.蔡老板学数学(DP NTT) 考试代码 T2 T3 2 ...

  2. nowcoder(牛客网)OI测试赛2 解题报告

    qwq听说是一场普及组难度的比赛,所以我就兴高采烈地过来了qwq 然后发现题目确实不难qwq.....但是因为蒟蒻我太蒻了,考的还是很差啦qwq orz那些AK的dalao们qwq 赛后闲来无事,弄一 ...

  3. 冲刺Noip2017模拟赛3 解题报告——五十岚芒果酱

    题1  素数 [问题描述] 给定一个正整数N,询问1到N中有多少个素数. [输入格式]primenum.in 一个正整数N. [输出格式]primenum.out 一个数Ans,表示1到N中有多少个素 ...

  4. 冲刺Noip2017模拟赛1 解题报告——五十岚芒果酱

    题1 国际象棋(chess) [问题描述] 有N个人要参加国际象棋比赛,该比赛要进行K场对弈.每个人最多参加2场对弈,最少参加0场对弈.每个人都有一个与其他人都不相同的等级(用一个正整数来表示).在对 ...

  5. SCNU ACM 2016新生赛决赛 解题报告

    新生初赛题目.解题思路.参考代码一览 A. 拒绝虐狗 Problem Description CZJ 去排队打饭的时候看到前面有几对情侣秀恩爱,作为单身狗的 CZJ 表示很难受. 现在给出一个字符串代 ...

  6. SCNU ACM 2016新生赛初赛 解题报告

    新生初赛题目.解题思路.参考代码一览 1001. 无聊的日常 Problem Description 两位小朋友小A和小B无聊时玩了个游戏,在限定时间内说出一排数字,那边说出的数大就赢,你的工作是帮他 ...

  7. CH Round #55 - Streaming #6 (NOIP模拟赛day2)解题报告

    T1九九归一 描述 萌蛋在练习模n意义下的乘法时发现,总有一些数,在自乘若干次以后,会变成1.例如n=7,那么5×5 mod 7=4,4×5 mod 7=6,6×5 mod 7=2,2×5 mod 7 ...

  8. nowcoder(牛客网)OI测试赛3 解题报告

    昨天因为胡搞了一会儿社团的事情,所以错过(逃过)了nowcoder的测试赛..... 以上,听说还是普及组难度qwq,而且还有很多大佬AK(然而我这么蒻肯定还是觉得有点难度的吧qwq) 不过我还是日常 ...

  9. 【HHHOJ】NOIP模拟赛 玖 解题报告

    点此进入比赛 得分: \(100+20+100=220\)(还不错) 排名: \(Rank\ 16\) \(Rating\):\(+20\) \(T1\):[HHHOJ263]「NOIP模拟赛 玖」三 ...

随机推荐

  1. fastadmin编辑内容,有下拉选择关联的内容,自定义的参数去获取相应的下拉内容

    1.可以到你的编辑页面中添加自定义条件 data-params='{"custom[shop_id]":"2"}'

  2. [Ubuntu]18安装navicat 破解版&官方版本

    破解版本: 一.下载破解版的navicat  链接:https://pan.baidu.com/s/1ulptSderoG0EbEQpO3Adww提取码:8oc3 二.解压到桌面 在下载压缩文件之后, ...

  3. a lot of attention under the hood

    Because one of the original goals of the Node.js project was to allow developers to easily build app ...

  4. 一首好听的摇滚歌曲(Ever Dream),以及优美的译作

     送上一首好听的摇滚歌曲,以及优美的译作.祝大家新年快乐.happy new year!  [ti:Ever Dream][ar:Nightwish][al:Century Child][by:吖光] ...

  5. Python异步IO之协程(一):从yield from到async的使用

    引言:协程(coroutine)是Python中一直较为难理解的知识,但其在多任务协作中体现的效率又极为的突出.众所周知,Python中执行多任务还可以通过多进程或一个进程中的多线程来执行,但两者之中 ...

  6. 堡垒机直接调用RUN

    两个脚本 Run.vbe   参考https://blog.csdn.net/skypeGNU/article/details/12708221 set ws=wscript.createobject ...

  7. gdb调试caffe工程

    环境:UBUNTU 16.04 CMake caffe 1.0.0-rc3 1.首先编译caffe为debug版本: 在caffe根目录下编辑CMakeFileList.txt,加入如下几行: SET ...

  8. 专业写博一天------ArrayList 线程安全

    首先我们要了解什么是线程安全: 首先我们要明白线程的工作原理,jvm有一个main  memory ,而每个线程有自己的working memory,一个线程对一个variable  进行操作时,都要 ...

  9. DevOps - 微服务与Serverless

    微服务 简介 "微服务"强调的是服务的大小,它关注的是某一个点. "微服务架构"则是一种架构思想,需要从整体上对软件系统进行通盘的考虑. 通俗来说,微服务架构就 ...

  10. 小米6使用charles抓包https

    1. 下载charles 地址: https://zhubangbang.com/charles-crack-version-free-download-and-install-tutorial.ht ...