题目链接https://codeforces.com/contest/1252/problem/F


题意

给出一棵树,问删去一个度大于1的节点,使得剩下的树两两同构。问剩下的树最多是多少。


题解

容易想到,能够删去的点不可能存在多个,而且删去的必然是树的重心。剩下就是个判树同构了,而这个可以直接对树进行哈希来判断。

关于树的哈希与判树同构:https://www.luogu.org/problemnew/solution/P5043


#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const ll N=4e3+7;
const ll M=(ll)1e17+7;
const ll mod=998244353;
struct Edge{ll v,nxt;
}e[N*2];
int p[N],edn;
void add(ll u,ll v){e[++edn]=(Edge){v,p[u]};p[u]=edn;e[++edn]=(Edge){u,p[v]};p[v]=edn;
}
ll n;
ll sz[N];
void getsz(ll x,ll pre){sz[x]=1;for(ll i=p[x];i!=-1;i=e[i].nxt)if(e[i].v!=pre){getsz(e[i].v,x);sz[x]+=sz[e[i].v];}
}
ll getrt(ll x,ll pre){for(ll i=p[x];i!=-1;i=e[i].nxt)if(e[i].v!=pre){if (sz[e[i].v]>n/2) return getrt(e[i].v,x);}return x;
}
ll a[N],tot,rt;
void getp(ll u,ll f){a[++tot]=u;for(ll i=p[u];~i;i=e[i].nxt){ll v=e[i].v;if(v==f) continue;getp(v,u);}
}
;
ll Hash(ll x,ll f){vector<int>q;int ans=N;for(int i=p[x];~i;i=e[i].nxt)if(e[i].v!=f&&e[i].v!=rt) q.push_back(Hash(e[i].v,x));sort(q.begin(),q.end());for(int i=0;i<q.size();i++) ans=(ans*19260817+q[i])%mod;return (ans*19260817+N+1)%mod;
}
ll ans[N][N];
int main()
{scanf("%lld",&n);for(ll i=1;i<=n;i++) p[i]=-1;edn=-1;for(ll i=1,u,v;i<n;i++){scanf("%lld%lld",&u,&v);add(u,v);}getsz(1,0);rt=getrt(1,0);getsz(rt,0);ll num=0;for(ll i=p[rt];~i;i=e[i].nxt){num++;tot=0;getp(e[i].v,rt);for(ll j=1;j<=tot;j++) ans[num][j]=Hash(a[j],0);sort(ans[num]+1,ans[num]+tot+1);if(num==1) continue;ll k=0;while(k<=tot) if(ans[num][++k]!=ans[1][k]) break;if(k<=tot){printf("-1\n");return 0;}}printf("%lld\n",num);
}

【树的哈希/树同构】2019-2020 ICPC, Asia Jakarta Regional Contest - F. Regular Forestation相关推荐

  1. 并查集 ---- 扩展域并查集判二分图 + 循环模拟字典树 The 2020 ICPC Asia Macau Regional Contest C. Club Assignment (详解)

    题目链接 题目大意: 有n个数,现在要把他们拆分成两个集合,假设S为集合,有如下定义: f(S)={min(x⊕y)∣x,y∈S,andx!=y}f(S)=\{min(x\oplus y)|x,y\i ...

  2. The 2020 ICPC Asia Macau Regional Contest J. Jewel Grab(数颜色+链表)

    J. Jewel Grab Tartarus _Wallace_ 转化询问:对于一个询问 [s,k],找到一个最长的区间 [s,t],满足区间中出现次数超过一次的元素,的出现次数减一,的和,不超过 k ...

  3. The 2020 ICPC Asia Macau Regional Contest A. Accelerator(分治+NTT)

    A. Accelerator 实质上就是求n个多项式相乘 (a1+x)(a2+x)-(an+x)(a_1+x)(a_2+x)\dots(a_n+x) (a1​+x)(a2​+x)-(an​+x) 对于 ...

  4. The 2020 ICPC Asia Macau Regional Contest

    文章目录 前言 D.Artifacts F. Fixing Networks L. Random Permutation 总结 前言 vp D.Artifacts 题意:阅读理解,字符串中提取出来对应 ...

  5. The 2019 ICPC Asia Shanghai Regional Contest

    The 2019 ICPC Asia Shanghai Regional Contest 题号 题目 知识点 A Mr. Panda and Dominoes B Prefix Code C Maze ...

  6. The 2020 ICPC Asia Shenyang Regional Programming Contest I题 Rise of Shadows(数论)

    题目链接The 2020 ICPC Asia Shenyang Regional Programming Contest 题目大意: 一天内有H小时,每小时M分钟,时针分针以恒定速率旋转. 现在若时针 ...

  7. The 2020 ICPC Asia Yinchuan Regional Programming Contest

    The 2020 ICPC Asia Yinchuan Regional Programming Contest A 开三个vector数组存储x,y,z轴上的点,unique+erase去重 #in ...

  8. The 2020 ICPC Asia Yinchuan Regional Programming Contest 银川 B. The Great Wall 题解

    题目链接:Problem - B - Codeforces input1: 5 1 2 3 4 5 output1: 4 3 2 1 0 input2: 5 1 2 1 2 1 output2: 1 ...

  9. The 2019 ICPC Asia Nanjing Regional Contest(A、C、K)

    A. A Hard Problem 在全排列1到n中每k个数作为一段,每段必存在u,v使得u是v的一个因子,考虑每段最短是多长,直接倒着考虑,假如n=6,最后肯定是要3...6才能符合题意,假如n=7 ...

最新文章

  1. 记录-MySQL中的事件调度Event Scheduler
  2. java请求慢_为什么重复的GET请求变慢了?
  3. Linux与win2003下修改mac地址方法
  4. summary+plan
  5. 令人眼睛一亮的履历表
  6. php dns刷新,Windows DNS缓存自动刷新
  7. Theano 中文文档 0.9 - 7.2.1 起手式 —— 代数
  8. 新修订未成年人保护法6月1日正式实施
  9. 曲线拟合最小二乘法对数c语言实现,数值计算_第6章曲线拟合的最小二乘法
  10. java对接支付宝三方登录
  11. 高途季报图解:营收11亿 已停止K-9服务,谋求转型
  12. 奥利给!搞定JVM就靠它了!不看感觉错过一个亿!吐血整理两个月,原创!全网第一份超详细JVM知识点导图!!!
  13. [最新]5个OpenAI的密钥/接口key 5个可用的API KEY分享(免费使用)
  14. excel数据库_最新技术让excel秒变web数据库
  15. Qt编写高仿苹果MAC电脑输入法(支持触摸滑动选词)
  16. supervisorctl error (no such process)
  17. mysql 实现日期格式化(date_format)
  18. vr授权服务器虚拟机,vm虚拟机上的连接远程服务器
  19. 网络常见面试题总结(四)
  20. 程序员用Python赚外快的具体指南!找点轻松的活增加收入

热门文章

  1. 新年扯皮以及一些比较正经的东西
  2. 关于昨天听直播的一点胡想
  3. word 2013中突然间无法输入中文
  4. 用一张船票,去往5G未来:华为 Mate20 X(5G)的降临故事
  5. (62)TCL脚本命令【format】
  6. 15 款面向内容创作者的 AI 工具
  7. 干货 | 快速搞懂DC-DC升压电路和DC-DC升压模块原理
  8. SAP恢复历史记忆处理方法
  9. JavaScript 如何工作的: 事件循环和异步编程的崛起 + 5 个关于如何使用 async/await 编写更好的技巧...
  10. H5Css float:left居中