所以我们的可以得出这样的一条结论,图灵一直专门负责ENIGMA的密码分析


题解:

题目真**长

咱俩用LCT来裁撤那道题。
先是我们需求考查到壹天性质.每三回出席的病毒一定是新变种。
也正是说其实各种点究竟是这种颜色并不重要,因为每贰回都步入新颜色
据此不管什么颜色都会被直接xx掉。

就此大家的能够吸取那样的一条结论

  • 二个点到根的不如的颜料数即为那么些点到根时经过的虚边的个数
    也正是说大家一直把第二个操作当做access操作
    我们开采这么前四个操作都解除了
    可是大家查询三个点的时候并不可能暴力跳fa找经过的虚边数.
    从而大家供给外表维护一下.
    鉴于大家要询问的是多个子树内的权和,这大家应该自然地想到用dfs序
    由此大家在拓宽LCT的长河中在外表动态维护贰个dfs序.

Wait !!这是有换跟操作的呀,dfs序不是恒久的.
我们能够依据当前的根节点rt与查询节点u的关联来分类商量.
具体是:

if rt == u: query all
if lca(rt,u) == rt : query tree of u
if lca(u,rt) == u :
    find point p has min depth and (lca(p,rt) = p,lca(p,u) = u)

上述lca是指在开端树中.
笔者们发掘lca 只是用来祖孙判别的,我们得以用dfs序来代替这些简单的难题.

还不亮堂的话,,能够看本人那从晚自习初步一贯调到第二天早自习的代码.

风流倜傥经有人想问笔者是怎么完毕拍了后生可畏夜晚没寻找错交到bzoj上4msRE却只因为本人写多少生成器的时候只生成了询问操作的话笔者是会特别愿意地告知你现在写多少生成器写到二分之一的时候不要因为有事就编写翻译好生成器然后关掉生成器的cpp去干一些别样的欢快的会让您忘了您的生成器还未写完的专业比方说在大降水天去高校满是水的塑胶跑道上去跑操何况跑完后躺在全部是水的假草坪上然后会机房的时候再感个冒.

。。。 。。。

呵呵

#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
typedef long long ll;
inline void read(int &x){
    x=0;char ch;bool flag = false;
    while(ch=getchar(),ch<'!');if(ch == '-') ch=getchar(),flag = true;
    while(x=10*x+ch-'0',ch=getchar(),ch>'!');if(flag) x=-x;
}
const int maxn = 410000;
const double eps = 1e-8;
inline int dcmp(const double &x){
    return (x > -eps) - (x < eps);
}
int a[maxn],n,dep[maxn],rt;
namespace Graph{
    struct Edge{
    int to,next;
    }G[maxn<<1];
    int head[maxn],cnt;
    void add(int u,int v){
    G[++cnt].to = v;
    G[cnt].next = head[u];
    head[u] = cnt;
    }
    int ind[maxn],oud[maxn];
    int dfs_clock,fa[maxn][23];
#define v G[i].to
    void dfs(int u){
    ind[u] = ++ dfs_clock;a[dfs_clock] = u;
    for(int i = head[u];i;i=G[i].next){
        if(v == fa[u][0]) continue;
        dep[v] = dep[u] + 1;
        fa[v][0] = u;dfs(v);
    }
    oud[u] = dfs_clock;
    }
#undef v
}
namespace seg{
    double T[maxn<<2],lazy[maxn<<2];
    void build(int rt,int l,int r){
    if(l == r){
        T[rt] = dep[a[l]];
        return ;
    }
    int mid = (l+r) >> 1;
    build(rt<<1,l,mid);
    build(rt<<1|1,mid+1,r);
    T[rt] = T[rt<<1] + T[rt<<1|1];
    }
    inline void pushdown(int rt,int l,int r){
    if(rt == 0 || dcmp(lazy[rt] == 0) ) return;
    int mid = (l+r) >> 1;
    lazy[rt<<1] += lazy[rt];
    lazy[rt<<1|1] += lazy[rt];
    T[rt<<1] += lazy[rt]*(mid - l + 1);
    T[rt<<1|1] += lazy[rt]*(r - mid);
    lazy[rt] = 0;
    }
    void modify(int rt,int l,int r,int L,int R,int val){
    if(L <= l && r <= R){
        lazy[rt] += val;
        T[rt] += (r-l+1)*val;
        return ;
    }
    int mid = (l+r) >> 1;pushdown(rt,l,r);
    if(L <= mid) modify(rt<<1,l,mid,L,R,val);
    if(R >  mid) modify(rt<<1|1,mid+1,r,L,R,val);
    T[rt] = T[rt<<1] + T[rt<<1|1];
    }
    void modify(int x,int val){
    using namespace Graph;
    if(x == rt) modify(1,1,n,1,n,val);
    else if(ind[rt] < ind[x]||oud[x] < ind[rt])modify(1,1,n,ind[x],oud[x],val);
    else{
        int p = rt;
        for(int j=20;~j;--j){
        if(dep[fa[p][j]] <= dep[x]) continue;
        p = fa[p][j];
        }
        if(1 <= ind[p] - 1) modify(1,1,n,1,ind[p]-1,val);
        if(oud[p] + 1 <= n) modify(1,1,n,oud[p]+1,n,val);
    }
    }
    double query(int rt,int l,int r,int L,int R){
    if(L <= l && r <= R) return T[rt];
    int mid = (l+r) >> 1;pushdown(rt,l,r);
    if(R <= mid) return query(rt<<1,l,mid,L,R);
    if(L >  mid) return query(rt<<1|1,mid+1,r,L,R);
    return query(rt<<1,l,mid,L,R) + query(rt<<1|1,mid+1,r,L,R);
    }
}
namespace lct{
    struct Node{
    Node *ch[2],*fa;
    int id,tag;
    }mem[maxn],*it,*null;
    inline Node* newNode(){
    Node *p = it++;p->ch[0] = p->ch[1] = p->fa = null;
    p->id = -1;p->tag = 0;return p;
    }
    inline void init(){
    it = mem;null = it++;null->id = -1;
    null->ch[0] = null->ch[1] = null->fa = null;
    null->tag = 0;
    for(int i=1;i<=n;++i) newNode()->id = i;
    for(int i=2;i<=n;++i){
        (mem+i)->fa = (mem+Graph::fa[i][0]);
    }
    }
    inline void rever(Node *p){
    p->tag ^= 1;swap(p->ch[0],p->ch[1]);
    }
    inline void pushdown(Node *p){
    if(p == null || p->tag == 0) return ;
    if(p->ch[0] != null) rever(p->ch[0]);
    if(p->ch[1] != null) rever(p->ch[1]);
    p->tag = 0;
    }
    inline void rotate(Node *p,Node *x){
    int k = p == x->ch[1];
    Node *y = p->ch[k^1],*z = x->fa;
    if(z->ch[0] == x) z->ch[0] = p;
    if(z->ch[1] == x) z->ch[1] = p;
    if(y != null) y->fa = x;
    p->fa = z;p->ch[k^1] = x;
    x->fa = p;x->ch[k] = y;
    }
    inline bool isroot(Node *p){
    return (p == null) || (p->fa->ch[0] != p && p->fa->ch[1] != p);
    }
    inline void splay(Node *p){
    pushdown(p);
    while(!isroot(p)){
        Node *x = p->fa,*y = x->fa;
        pushdown(y);pushdown(x);pushdown(p);
        if(isroot(x)) rotate(p,x);
        else if((x->ch[0] == p)^(y->ch[0] == x)) rotate(p,x),rotate(p,y);
        else rotate(x,y),rotate(p,x);
    }
    }
    inline Node* find(Node *p){
    pushdown(p);
    while(p->ch[0] != null){
        p = p->ch[0];
        pushdown(p);
    }
    return p;
    }
    inline void access(Node *x){
    for(Node *y = null;x != null;y=x,x=x->fa){
        splay(x);
        if(x->ch[1] != null){
        Node *p = find(x->ch[1]);
        seg::modify(p->id,1);
        }
        x->ch[1] = y;
        if(y != null){
        Node *p = find(y);
        seg::modify(p->id,-1);
        }
    }
    }
    inline void makeroot(Node *p){
    access(p);splay(p);rever(p);
    rt = p->id;
    }
}
inline double query(int x){
    using namespace Graph;
    if(rt == x) return 1.0*seg::query(1,1,n,1,n)/n;
    if(ind[rt] < ind[x] || oud[x] < ind[rt])
    return 1.0*seg::query(1,1,n,ind[x],oud[x])/(oud[x]-ind[x]+1);
    int p = rt;
    for(int j=20;~j;--j){
    if(dep[fa[p][j]] <= dep[x]) continue;
    p = fa[p][j];
    }
    double upside = .0;
    if(1 <= ind[p] - 1) upside += seg::query(1,1,n,1,ind[p]-1);
    if(oud[p] + 1 <= n) upside += seg::query(1,1,n,oud[p]+1,n);
    double dnside = (ind[p]-1) + (n-(oud[p]+1)+1);
    return upside/dnside;
}
char cmd[12];
int main(){
    int m;read(n);read(m);
    for(int i=1,u,v;i<n;++i){
    read(u);read(v);
    Graph::add(u,v);
    Graph::add(v,u);
    }
    dep[1] = 1;rt = 1;Graph::fa[1][0] = 1;
    Graph::dfs(1);seg::build(1,1,n);lct::init();
    for(int j=1;j<=20;++j){
    for(int i=1;i<=n;++i){
        Graph::fa[i][j] = Graph::fa[Graph::fa[i][j-1]][j-1];
    }
    }
    int x;
    while(m--){
    scanf("%s",cmd);read(x);
    if(cmd[2] == 'L'){
        lct::access(lct::mem+x);
    }else if(cmd[2] == 'C'){
        lct::makeroot(lct::mem+x);
    }else{
        double ans = query(x);
        printf("%.10lf\n",ans);
    }
    }
    return 0;
}

鉴于那一个组的用力,特别是图灵的非凡专门的学业,他们操纵了破译该密码的一条龙情势,进而了然了德国军队的样子,通晓了大战的主动权,为英美联军制伏德意志做出了杰出奉献。1942年5 月十三日,破译小组第3回立了大功,因为截获了希特勒给海军中将雷德尔的后生可畏封密电,将随时名称为世界上最厉害的德意志大战舰“俾斯麦”号击沉。一九四四年4 月,扶桑联合舰队麾下长官山本八十四,在4 月二十日将飞抵卡西里湾,那份情报被破译小组破译,于是,那位战功卓著的东瀛主帅的飞机,在离开卡西里唯有几海里处被阻止并击落。

  • ###### 为何要运用这一个工具呢?

德意志一名计算机考古学家开采出Computer写作情诗程序,但他并不是那风度翩翩顺序的原创者。
早在60数年前,情诗生成程序已经问世。 电脑作诗
1948年6月,世界上首先台能完全执行存款和储蓄程序的电子Computer原型机在大不列颠及苏格兰联合王国蒙特雷大学诞生。人们给它定名“婴孩”。
那时候探究人员为它编写了几十种流行性程序,可是现今大多数已经错过。
英国研讨人士克里Stowe弗·Strachey也参与了“婴孩”的研制。他为考试那台原型机随机采纳新闻的技术,编写出自动创作情诗程序。
“婴孩”本身蕴藏了大气小说数据。每一趟运转作诗程序,大家只需输入几百个意思罗曼蒂克的动词和名词,它就会自动生成生机勃勃首短情诗。
Strachey把“婴孩”的“大作”打字与印刷出来贴在公告栏上。即使这几个情诗不料定能撼动女子的芳心,但作诗程序开创了计算机文本生成程序的判例。
后来随着Computer技术赶快发展,“婴孩”和作诗程序被人们慢慢忘却。 历史重演
德意志Computer考古学家戴维·瓦尔德近来在大不列颠及英格兰联合王国斯坦福大学博德利教室研商Strachey随想时意识这生机勃勃顺序。
他花3个月时间编写出相近的在线“情诗生成器”程序供网络基友自由使用。
顾客在线运营那朝气蓬勃程序,输入一些词语,每一次点击“重载”键,网页上就能够产出风度翩翩首新的情诗。
U.K.《西雅图新闻早报》10日引用瓦尔德的话报纸发表:“那牵涉到大器晚成都部队分有国际影响力的大不列颠及北爱尔兰联合王国Computer文化遗产。编写程序的那3个月十三分折磨人,因为依据现在行业内部,那生机勃勃前后相继非常原始。”
瓦尔德将于3月下旬在U.K.London就作诗程序宣布演说。他创建的“婴孩”复制机不久后就要德意志联邦共和国展出,届时他会用那台机器演示“表白信程序”。
计算机“艺术”
Strachey1916年一败涂地于英格雷厄姆普斯特德,老爸爱好音美,老母是一名地艺术学家和电气程序员。那让Strachey从小受到艺术和理工科知识的再一次影响。
他1935年步入德克萨斯奥斯汀分校大学太岁高校上学,结束学业后做过物艺术学家和校长,并从20世纪40年份起首对计算机技艺发生兴趣。
1951年1月,Strachey第贰遍接触有囤积程序的计算机并开首编写程序。1952年,他得了校长工作,成为英帝国国家商讨发展公司的全职Computer技巧商讨员。
同年夏天,Strachey从二姐那里拿走灵感,利用同事、著名Computer物工学家Alan·图灵的即兴数字生成器,开采出作诗程序,那是全人类第二次利用Computer生成文学作品。
Strachey还编制过最初的微机音乐软件。他于1975年在加州洛杉矶分校大学已去世。

个人观点看


  1. 编制程序是上学习话费用低于、效果与利益最大的学习课程,它只须要意气风发台Computer和软件,读书范围也仅须要一张桌子和椅子
  2. 任何学科需求购买更加多的器材和提供更加大的场地或然需求建设一个空间来读书
  3. 编制程序是各个兴趣活动中唯后生可畏能够并且锻练多种本事进步的技术

题目:

黑客们通过对已某个病毒反编译,将大多例外的病毒重新整合,并再一次编写翻译出了最新的组成病毒。这种病毒的孳生和多变技能极强。为了阻止这种病毒传播,某安全机关策划了贰遍试验,来研商这种病毒。
实验在一个密闭的局域网内举行。局域网内有n台Computer,编号为1~n。一些处理器之间通过网线直接相接,产生树形的构造。局域网中有生机勃勃台十分的微处理器,称之为大旨Computer。依据一些始发的切磋,研究员们拟订了一个总共m步的试验。实验始于以前,大旨Computer的号子为1,每台微型Computer中都有病毒的多个变种,并且每台Computer中的变种都不均等。实验中的每一步会是下面中的生龙活虎种操作:

  1. RELEASE x
    在数码为x的计算机中植入病毒的八个新变种。那么些变种在植入以前不设有于局域网中。
  2. RECENTER x
    将挑豫州Computer改为编号为x的微型计算机。可是这么些操作会促成原来基本Computer中的病毒产生新变种,并感染过来。换言之,假若操作前的骨干计算机编号为y,也正是在操作后附加了一遍RELEASE
    y的操作。
    借助钻探的下结论,在植入多少个新变种时,病毒会在局域网中寻找宗旨Computer的职分,并顺着互联网中最短的路子感染过去。
    而首先轮实验揭穿了贰个惊人的真面目:病毒的不如变种是排斥的。新变种在感染风流浪漫台早就被旧变种感染的管理器时,会把旧变种完全绝迹之后再感染。但商讨员开采了贯彻进程中的漏洞。如若新变种在耳闻则诵进程中并未有销毁过那类旧变种,必要先花费1单位时间深入分析旧变种,本领销毁。即使此前销毁过那类旧变种,就能够以为销毁不花费时间。病毒在两台Computer之间的散播亦可认为不耗时。
    商讨员对全体感染进程的耗费时间特意感兴趣,因为那是覆灭病毒的可是机遇。于是在m步实验之中,切磋员临时还有恐怕会做出如下的领悟:
    3,REQUEST x
    询问风流洒脱旦在编号为x的微型Computer的要紧集结中的Computer中植入二个新变种,平均感染时间为多少长度。编号为y的管理器在数码为x的计算机的首要集结中,当且仅当从y沿互连网中的最短路线感染到骨干Computer必得经过x。由于有RECENTEPAJERO操作的留存,这么些集合并不一定是始终不改变的。
    从那之后,安全机构以为曾经无需实际的尝试了,于是他们拜托你编写三个主次,模拟实验的结果,并回复全部的摸底。

图灵的密码有趣的事要从三个“谜”开端,ENI链霉素A (谜)
源自于希腊共和国(The Republic of Greece)文,既是战争时期所用的密码(在具有用于军旅和外交的密码里,最盛名的恐怕应属第二遍世界战袖手观看中国和德国意志联邦共和国应用的ENIGMA),而破解那几个密码的难为Alan•
麦席森• 图灵。

UNE Esthetique
Programmee,能够如此说,是在探求办法表现新领域的风潮下,小编个人的情怀状态。为达此指标,作者必得先读书一门编制程序语言,还要找到意气风发台带绘图仪的Computer,让绘图机器连到Computer上。
在20世纪60年间,那是风姿罗曼蒂克项特别复杂的任务,当时还还未学园照旧高校能够学学编制程序,编制程序相关的书本也少之又少,找到豆蔻年华台微型Computer更是意气风发种挑衅,因为那儿Computer主题的硬件价值几百万美金,空气调节机器房占地2000平方英尺,那自然不是任何个人可以肩负得起的,要想找到并且赢得行使权限确实不易于。
将想要做的政工进行逻辑定义,进而把壹人的沉思编写为顺序,那样的就学实乃有意思,也为本身的美学研商提供了一个全新的见地,让自家对视觉进度有了更浓郁的明亮。计算机从精力和智力商数两上面都增加了自家的艺创进程,其完整机能比两地点成效之和更要大。后来,小编就把自家的艺术创作叫做艺术“生成文章”,因为那个标识是自个儿本中国人民银行使结构合理的编制程序算法,提前定制的。由此,笔者的职业是大器晚成种算法艺术,一种“编制程序美学”,其贯彻从前早就概念上存在(以程序方法)。

STREAM既然是前程的大势,这奇宝为啥偏偏强调是小儿编制程序(Coding)并非其他课程呢?能够从这几地点看的

图灵的浩大企图和预知都在他死后不停获得认证,也一向引导、拉动着计算机科学的开辟进取。国际Computer组织于一九六九年设置“图灵奖”,以专门奖赏对Computer调研与推进计算机技艺进步有特异进献的卓著物教育学家。

咱俩成立了Perpetual Storytelling
Apparatus,是因为Julius和自己早先(今后也是)对专利都拾叁分感兴趣,当您要创立黄金年代件事物时,先要看看别人是何等消除那几个标题标,专利是翻开本事原理的特级路径。
专利数据库正是发明创立的大字典,八个高大的档案库,但多数人一向就从未有过翻动过专利文献。该装置也为斟酌知识的大洋提供了考古渠道,那意味着去发布这几个截至了的故事,那正是为何把专利号也出口到每一种图像旁边的原因。观者能够先在脑海中构造出故事概况,还可以够够一语破的钻探背后掩藏的意思。
专利也是对一时的形容,能够显示出个人和供销合作社怎样努力缓慢解决(应对)面前遭受的要求和挑战。比如,在精气神治疗药物被发明此前,相当多描述禁绝精神病痛者的法子也足以在专利中找到。
我们营造的绘图机器能够把专利附图转换到绘图动作,即使时期久远,但大多专利附图都很详细,並且符合视觉语言的一路规范。
Perpetual Storytelling
Apparatus布署照片,图片由Benjamin·毛斯和Julius·冯·俾斯麦提供。
140访谈:图片

点击关键字读书编制程序中孩子编制程序医学习随笔

自个儿是大人,对编制程序0精晓
了解STEM
STREAM教育
奇宝STREAM课程

我是唐一(微信号11681445),奇宝科技联合创始人。当过几年老师,编写过9本FLASH和PHOTOSHOP教科书,参与过上百集的长篇动画制作,带团队开发了500多个幼教APP。现在全力打造“编程中国”社群项目,旨在普及中国儿童学习编程,给孩子创造未来的力量。希望认识更多朋友分享我的经验和学习你的心得!

本着那意气风发情状,政坛创设了三个新的机关——United Kingdom政党密码学校(Government Code
and Cipher School,
GCCS),总局放在在黄金汉郡的布莱切利庄园。这些难点也交到了图灵手中,从1936年六月尾始,图灵一贯特别担负ENI螺旋霉素A的密码解析。他统领着大概200多名精干职员张开密码深入分析,个中以至还蕴涵世界象棋亚军亚牛首山大。剖析和总计的做事特别复杂,三十个假名在“ENI奇霉素A”机中能代替8万亿个谜文字母。若是订正接线,变化会超越2.5
千万亿亿。图灵依附着他的天赋假造设计出大器晚成种破译机。那台机器重要由继电器构成,还用了柒十七个电子管,由光电阅读器直接读入密码,每秒可读字符二〇〇一个,被称之为“图灵炸弹(Bombes)”。

  • #### 什么是Une Esthetique Programmee?