o2o网站模版网站开发完成情况说明

web/2025/10/5 21:09:43/文章来源:
o2o网站模版,网站开发完成情况说明,wordpress c博客,外贸网站制作策划题干#xff1a; JYY有两棵树A和B#xff1a;树A有N个点#xff0c;编号为1到N#xff1b;树B有N1个点#xff0c;编号为1到N1。JYY知道树B恰好是由树A加上一个叶 节点#xff0c;然后将节点的编号打乱后得到的。他想知道#xff0c;这个多余的叶子到底是树B中的哪一个…题干 JYY有两棵树A和B树A有N个点编号为1到N树B有N1个点编号为1到N1。JYY知道树B恰好是由树A加上一个叶 节点然后将节点的编号打乱后得到的。他想知道这个多余的叶子到底是树B中的哪一个叶节点呢 Input 输入一行包含一个正整数N。 接下来N-1行描述树A每行包含两个整数表示树A中的一条边 接下来N行描述树B每行包含两个整数表示树B中的一条边。 1≤N≤10^5 Output 输出一行一个整数表示树B中相比树A多余的那个叶子的编号。如果有多个符合要求的叶子输出B中编号最小的 那一个的编号 Sample Input 5 1 2 2 3 1 4 1 5 1 2 2 3 3 4 4 5 3 6 Sample Output 1 Hint 解题报告  哈希规则子树u的哈希值由它的每一个子树vi的哈希值得来首先将所有f(v)排个序防止顺序不同造成影响然后 W是事先选取的一个位权MOD是模数size(u)是子树u的大小。 这样DFS一遍可求出以1号节点为根时所有子树的哈希值f(u)。 但是这是无根树我们想求出以任意节点为根时整棵树的哈希值。 设fa[u]以1为根时u的父亲则上面的f(u)也是以fa[u]为根时子树u的哈希值。 再求一个g(u)表示以u为根时子树fa[u]的哈希值。这个g(u)怎么求呢再DFS一遍对于每个节点g(u)由g(fa[u])以及u的每个兄弟vi的f(vi)得来。但是直接暴力枚举的话在菊花图上是O(n^2)的那怎么办呢 对于每个节点u维护一个数组存储它所有儿子的哈希值f(v)如果有父亲则g(u)也在里面把这个数组排好序求出每个前缀的哈希值和每个后缀的哈希值。这时以u为根时整棵树的哈希值就是整个数组的哈希值再乘上子树大小n。 此时求每个儿子v的g(v)就是从那个数组中间去掉f(v)后的哈希值二分查找后把前缀哈希值和后缀哈希值拼起来就可以得到。记得乘上v为根时uu的size即n−size(v)。 这样就求出以每个节点为根的哈希值了。 把A的所有哈希值存到一个set里然后枚举B的每个度为1的点u求出以u为根它的唯一子树v的哈希值如果set里有这个值u就是所求的点之一。部分内容参考自链接 首先明确一个问题以u为根节点的树的Hash值树的大小 * 子树Hash值的带权和 % MOD也就是说这个根节点是以子树大小的身份参与到其中的。也就是HASH[u]其实重头戏在于u的孩子节点而u在其中的作用只是size那一部分权重而已其他的都与他无关。这是在做树的问题的时候和其他问题不一样的一点也是比较有特色的一点。  g[v]代表以v为根时子树u的Hash值。也就是以v为根节点的 部分哈希和那么g[v]由g[u]和v的一系列兄弟节点f[vi]带权得来。 AC代码 #includecstdio #includeiostream #includealgorithm #includequeue #includemap #includevector #includeset #includestring #includecmath #includecstring #define F first #define S second #define ll long long #define pb push_back #define pm make_pair using namespace std; typedef pairint,int PII; const int MAX 2e5 5; const ll MOD 2000020331; //const ll MOD 2000004199; 用这个模数都没有问题 const ll seed 31;// ll PW[MAX]; struct Edge {int v,ne; } e[MAX]; int head[MAX],tot; int n; int deg[MAX]; bool isB; void add(int u,int v) {if(isB) deg[u];e[tot].v v;e[tot].ne head[u]; head[u] tot; } int size[MAX],fa[MAX]; vectorll son[MAX],sl[MAX],sr[MAX]; ll f[MAX],g[MAX]; setll vis; ll dfs1(int cur,int rt) {ll res 0;fa[cur] rt; son[cur].clear();//必须要清空 size[cur] 1;for(int i head[cur]; ~i; i e[i].ne) {int v e[i].v; if(v rt) continue;ll tmp dfs1(v,cur);son[cur].push_back(tmp);size[cur] size[v]; }if(son[cur].empty()) return f[cur] 1;//注意叶子结点的HASH值需要是1而不能是0也就是son数组中必须都是正数的HASH值。sort(son[cur].begin(),son[cur].end());int up son[cur].size();for(int i 0; iup; i) res (res * seed son[cur][i]) % MOD; return f[cur] size[cur] * res % MOD; } int ans; void dfs2(int u) {if(fa[u]) {son[u].pb(g[u]);sort(son[u].begin(),son[u].end());}int up son[u].size();sl[u].resize(up);sl[u][0] son[u][0]; for(int i 1; iup; i) {//好像不太能把初始化合并进来 sl[u][i] (sl[u][i-1] * seed son[u][i])%MOD;}sr[u].resize(up);sr[u][up-1] son[u][up-1];for(int i up-2; i0; i--) sr[u][i] (sr[u][i1] son[u][i] * PW[up-i-1])%MOD; //其实不是求后缀的HASH值而是前缀HASH的后缀和所以要这么写 for(int i head[u]; ~i; i e[i].ne) {int v e[i].v;if(v fa[u]) continue;if(up 1) {g[v] 1; dfs2(v); break;}int p lower_bound(son[u].begin(),son[u].end(),f[v]) - son[u].begin();g[v] 0;if(p1 up) g[v] sr[u][p1];if(p-1 0) g[v] (g[v]sl[u][p-1]*PW[up-1-p])%MOD;g[v] g[v] * (n-size[v]) % MOD;if(isB deg[v] 1 vis.find(g[v]) ! vis.end()) ans min(ans, v);dfs2(v);}if(!isB) vis.insert(sl[u][up - 1] * n % MOD); } int main() {PW[0] 1;for(int i 1; iMAX; i) PW[i] PW[i-1]*seed % MOD;cinn;memset(head,-1,sizeof head);for(int u,v,i 1; in; i) {cinuv;add(u,v);add(v,u);}dfs1(1,0); dfs2(1);tot0,isB1,n;memset(head,-1,sizeof head);for(int u,v,i 1; in; i) {cinuv;add(u,v);add(v,u);} dfs1(1,0);ans1e9;if(deg[1] 1 vis.find(f[e[head[1]].v]) ! vis.end()) ans 1;dfs2(1);printf(%d\n,ans); return 0 ; } 另一种及其简单的Hash方式 我们只需要就可以了。 其中是每一个子树的hash值 这个函数和上一个函数一样支持换根那么就不限于找重心了 那第一颗树所有的hash值丢进set中第二颗树删除一个节点的hash值也可以用类似的方法弄出来。 #includecstdio #includeiostream #includealgorithm #includequeue #includemap #includevector #includeset #includestring #includecmath #includecstring #define F first #define S second #define ll long long #define pb push_back #define pm make_pair using namespace std; typedef pairint,int PII; const int MAX 2e5 5; //const ll MOD 2000020331;//这个模数在这个方法中可以直接扔掉了因为根本不是质数所以肯定要不了因为逆元的求法就不对。 const ll MOD 2000004199; //用这个模数都没有问题 const ll seed 13331;//可换 233,2333,23333对于第二个模数都可以过 ll INV; struct Edge {int v,ne; } e[MAX]; int head[MAX],tot; int n; void adde(int u,int v) {e[tot].v v;e[tot].ne head[u]; head[u] tot; } inline ll qpow(ll a,ll b) {ll res 1;while(b) {if(b1) res res * a % MOD;a a *a % MOD;b 1; }return res; } inline ll add(ll x,ll y) {return (xy)%MOD;} inline ll mul(ll x,ll y) {return (x*y)%MOD;} inline ll sub(ll x,ll y) {return (x-yMOD)%MOD;} ll H[MAX]; int size[MAX],du[MAX]; void dfs(int cur,int fa) {H[cur] 1;size[cur] 1;for(int i head[cur]; ~i; i e[i].ne) {int v e[i].v;if(v fa) continue;dfs(v,cur);size[cur] add(size[cur],size[v]);H[cur] mul(H[cur],H[v]);}H[cur] add(H[cur],size[cur]);H[cur] mul(H[cur],seed); } setll ss; bool isB; void dfs1(int cur,int fa) {if(isB0) ss.insert(H[cur]);//必须要先插入因为根的情况。 ll Hall mul(H[cur],INV),Hres;Hall sub(Hall,n);for(int i head[cur]; ~i; i e[i].ne) {int v e[i].v;if(v fa) continue;Hresmul(Hall,qpow(H[v],MOD-2));Hresadd(Hres,n-size[v]); Hresmul(Hres,seed);//至此Hres代表除v的树的Hash值H[v]mul(H[v],INV); H[v]sub(H[v],size[v]);H[v]mul(H[v],Hres);H[v]add(H[v],n);H[v]mul(H[v],seed);dfs1(v,cur);} } int main() {INV qpow(seed,MOD-2);cinn;tot0;memset(head,-1,sizeof head);for(int u,v,i 1; in; i) scanf(%d%d,u,v),adde(u,v),adde(v,u);dfs(1,0);dfs1(1,0);tot0;memset(head,-1,sizeof head);n;for(int u,v,i 1; in; i) {scanf(%d%d,u,v);du[u],du[v];adde(u,v);adde(v,u);}isB1;dfs(1,0);dfs1(1,0);for(int i 1; in; i) {if(du[i] 1) {ll Hres mul(H[i],INV);Hres sub(Hres,n);if(ss.find(Hres) ! ss.end()) {printf(%d\n,i);return 0 ;}}}return 0 ; }

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/87558.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

后台风格网站短视频推广代理

golangvue微服务电商系统 文章目录 golangvue微服务电商系统一、项目前置准备二、项目简介三、代码GItee地址 golang、vue redis、mysql、gin、nacos、es、kibana、jwt 一、项目前置准备 环境的搭建 官方go开发工程师参考地址:https://blog.csdn.net/qq23001186/cat…

汕头市企业网站建设服务机构漳州建设银行网站

文章目录 “Q*”可能是什么?何为AI意识的产生?AI应该如何与人类对齐? 上周,OpenAI人事风波暂停的尾声中,有个“可能威胁人类”的、代号为“Q*”的神秘项目被抛掷出来。 传言中,Sam Altman被解雇前&#xff…

网站做留言板关于服装的网站规划与设计

近日,由中国网络空间安全协会主办,中国网络空间安全协会网络空间安全法律与公共政策专业委员会、北京邮电大学互联网治理与法律研究中心、公安部第三研究所网络安全法律研究中心、西安交通大学信息安全法律研究中心承办的《网络安全法(草案二…

做视频的网站带模板苏醒主题wordpress

一、引言 时间复杂度是衡量算法运行效率的一项重要指标,它描述了随着输入规模的增加,算法的执行时间如何增长。在算法设计与分析中,我们经常面临着优化时间复杂度的任务,以便提高程序的性能。本博客将深入探讨时间复杂度的优化法…

如何自己创建购物网站国家建筑信息管理平台

数学实验A 本仓库收集了2024年我在学习《数学实验A》课程期间完成的作业。课程使用的教材为《MATLAB数学实验》第三版,作者为胡良剑和孙晓君教授。 这个资源库的建立初衷是为了帮助南京邮电大学的同学们在学习过程中有一个参考的依据,减少一些无端浪费…

初创业公司做网站网站代码免费下载

一. pager-taglib-2.0简介预览. pager-taglib-2.0支持多种风格的分页,打开其源码,可以看到,处理标签的类为: PagerTag,有兴趣的同学可以研究下源码。 Simple: Text Icon: JSPTags.com : AllTheW…

网站尺寸自适应乐清新闻综合频道

现在可以用百度 百度安全验证 chatgpt用来搜索软件使用指令太牛了_个人渣记录仅为自己搜索用的博客-CSDN博客 chatgpt 使用案例 根据不同的目标群体变更文案和表达_个人渣记录仅为自己搜索用的博客-CSDN博客 倾听能力 和哪些基础能力相关 ,如何提高 chatgpt_个人渣记录仅为自…

网站建设播放vr视频西安网站开发公司排名

文章目录 Q1、什么是Spring Bean?和对象有什么区别Q2、配置Bean有哪几种方式?Q3、Spring支持的Bean有哪几种作用域?Q4、单例Bean的优势是什么?Q5、Spring的Bean是线程安全的吗?Q6、Spring如何处理线程并发问题&#xf…

购物网站成功案例Dw做html网站

​​​​ 文章目录 引言1. 错误详解2. 常见的出错场景2.1 用户输入处理错误2.2 动态数据源 3. 解决方案3.1 使用 get() 方法3.2 检查键是否存在 4. 预防措施4.1 数据验证4.2 使用默认字典 (defaultdict) 结语 引言 在Python开发中,处理字典时遇到 KeyError 是一种…

即墨网站设计wordpress 添加登录按钮

工作业务中,有大量分布式加锁的重复代码,存在两个问题,一是代码重复率高,二是容易产生霰弹式修改,使用注解和AOP可以实现代码复用,简化分布式锁加锁和解锁流程。 around注解是AspectJ框架提供的&#xff0c…

如何进行企业营销型网站建设规划东莞市建设工程网站

目录 基于JDE算法的实时多目标车辆跟踪方法 4.1引言 4.2 JDE多目标跟踪算法

龙港网站建设seo工作职责

[TOC] #说明 该文章仅科普下各方法是如何降低流片失败的可能性的。 #1. UVM方法学 1. uvm方法学的主要思想是通过用其它高级语言(python、c等)编写参考模型(REF)实现DUT设计相同功能。再使用uvm的一系列验证组件将相同的激励给…

网站备案 照片寻找在山西运城专业做网站推广的

1 概述: 在这篇文章中,我们将看到Angular 10中的APP_BASE_HREF是什么以及如何使用它。 APP_BASE_HREF为当前页面的基础href返回一个预定义的DI标记。 APP_BASE_HREF是应该被保留的URL前缀。 2 语法: provide: APP_BASE_HREF, useValue: /gfgapp3 步骤: 在app.m…

怎么建小说网站怎么样开发小程序

主题: 优先队列是一种非常有用的数据结构,它让你能够管理一组数据,使得每次访问或移除数据时,总是得到当前集合中优先级最高(或最低)的那个元素。这个特性让优先队列非常适用于需要快速访问集合中最重要元…

网站的开发公司倒闭对网站使用seosem顾问

红黑树 引言红黑树的介绍实现结点类insert搜索插入位置插入调整当parent为gparent的左子结点当parent为gparent的右子结点 参考源码测试红黑树是否合格总结 引言 在上一篇文章中我们认识了高度平衡的平衡二叉树AVL树:戳我看AVL树详解哦 (关于旋转调整的…

网站改版后seo该怎么做江苏网站建设yijuce

目录 1.数据流图 2.变换型设计和事务型设计 3.程序流程图 4.NS图和PAD图: 5.UML图 1.用例图 2.类图 3.顺序图 4.协作图 本文为个人复习资料,包含个人复习思路,多引用,也想和大家分享一下,希望大家不要介意~ …

手机上网站用建设工具h5制作平台排名

接前篇Unity 5.3.5p8 C#编译器升级,本文侧重了解一些Mono的知识。 Unity3D的编译器升级 新升级的Mono C#编译器(对应Mono 4.4) Unity编辑器及播放器所使用的Mono运行时还未升级。 新编译器仍针对C# 4,是旧的编译器也支持的版本。 …

承德网站建设流程网站流量如何来

如何通过adb获取root权限(安卓电视盒和智能电视通用)?Android 系统rom里面最主要的就3个文件:boot.img、system.img、userdata.img其中boot.img 存放着内核以及Android系统的配置信息,比如android系统各文件夹的读写权限,adb 的权限。所以如…

银川市做网站的公司seo百家论坛

JAVA数组与类的定义-java实验报告JAVA数组与类的定义-java实验报告、实验目的与要求1、 熟悉Java类、对象和方法的一般操作练习等。2、 熟悉数组等的定义和使用。二、实验内容及步骤(包括源程序和运行结果截图)1. 编写Java小应用程序,程序中自定义一个方法&#xff…

网站建设是怎么建的wordpress自动播放音乐

一、安装node.js 1、在官网中安装nodejs最新版本。地址:https://nodejs.org/en/download/,根据自己环境,进行下载安装。 2、安装完成后,进行nodejs版本及npm版本查看。 打开cmd命令行,输入 node -v 和 npm -v&#…