AtCoder4380 [AGC027F] Grafting(拓扑排序)

problem

洛谷链接

solution

首先特判掉两棵树一开始就相同的情况。

那么接下来就是一定要操作才能相同的情况了。

群龙无首不行,我们先定根。不妨枚举第一步的叶子操作,即枚举叶子以及其接的点。

然后对于 A,BA,BA,B 都以这个叶子为根,将整棵树提起来。

而一个点要动当且仅当其在 A,BA,BA,B 上的父亲不一样。(一样的话傻子才会动了又接回去)

因此可以 O(n)O(n)O(n) 遍历知道哪些点是要动的。

再者,因为只能动叶子,所以必须是从下往上动。

如果某个点是不动的,但这个点的父亲要动,那就是无解了。

AAA 树上是从下往上动,但在 BBB 树上则体现为从上往下动。(AAA 中越晚动的点在 BBB 中就越接在后面)

将这种先后顺序转化为图上的边,A:u→fau;B:fau→uA:u\rightarrow fa_u;B:fa_u\rightarrow uA:ufau;B:fauu

显然,如果存在环那也是无解了。

这样就转化成了拓扑序问题了。

时间复杂度 O(Tn3)O(Tn^3)O(Tn3)

code

#include <bits/stdc++.h>
using namespace std;
#define maxn 55
int T, n, ans;
bool vis[maxn];struct graph {int head[maxn], to[maxn << 2], nxt[maxn << 2], deg[maxn], f[maxn], cnt;void init() {cnt = 0;memset( head, -1, sizeof( head ) );memset( deg, 0, sizeof( deg ) );}void addedge( int u, int v ) {++ cnt;to[cnt] = v;nxt[cnt] = head[u];head[u] = cnt;deg[v] ++;}void dfs( int x, int fa ) {f[x] = fa;for( int i = head[x];~ i;i = nxt[i] )if( to[i] ^ fa ) dfs( to[i], x );}int topo() {int tot = 0;static queue < int > q;while( ! q.empty() ) q.pop();for( int i = 1;i <= n;i ++ )if( vis[i] and ! deg[i] ) q.push( i ), tot ++;while( ! q.empty() ) {int x = q.front(); q.pop();for( int i = head[x];~ i;i = nxt[i] )if( ! --deg[to[i]] ) q.push( to[i] ), tot ++;}return tot;}
}A, B, G;int solve() {int tot = 0; G.init();for( int i = 1;i <= n;i ++ )if( A.f[i] ^ B.f[i] ) vis[i] = 1, tot ++;else vis[i] = 0;if( tot >= ans ) return n + 1;for( int i = 1;i <= n;i ++ ) {if( ! vis[i] and vis[A.f[i]] ) return n + 1;if( vis[A.f[i]] ) G.addedge( i, A.f[i] );if( vis[B.f[i]] ) G.addedge( B.f[i], i );}return G.topo() == tot ? tot : n + 1;
}int main() {scanf( "%d", &T );while( T -- ) {scanf( "%d", &n );A.init(), B.init();for( int i = 1, u, v;i < n;i ++ ) {scanf( "%d %d", &u, &v );A.addedge( u, v );A.addedge( v, u );}for( int i = 1, u, v;i < n;i ++ ) {scanf( "%d %d", &u, &v );B.addedge( u, v );B.addedge( v, u );}ans = n + 1;for( int i = 1;i <= n;i ++ ) {A.dfs( i, 0 );B.dfs( i, 0 );ans = min( ans, solve() );if( A.deg[i] == 1 ) {for( int j = 1;j <= n;j ++ )if( i ^ j ) {A.dfs( j, i );B.dfs( i, 0 );A.f[i] = 0;ans = min( ans, solve() + 1 );}}}if( ans == n + 1 ) puts("-1");else printf( "%d\n", ans );}return 0;
}

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

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

相关文章

开源 , KoobooJson一款高性能且轻量的JSON框架

在C#领域&#xff0c;有很多成熟的开源JSON框架&#xff0c;其中最著名且使用最多的是 Newtonsoft.Json ,然而因为版本迭代,其代码要兼容从net2.0到现在的最新的net框架,并且要支持.net平台下的其它语言,所以最新发布版本的Newtonsoft.Json其dll大小接近700k,另一方面,因为其复…

高斯消元模板

高斯消元通用 #include<stdio.h> #include<algorithm> #include<iostream> #include<string.h> #include<math.h> using namespace std;const int MAXN50;int a[MAXN][MAXN];//增广矩阵 int x[MAXN];//解集 bool free_x[MAXN];//标记是否是不确…

[CodeForces gym 102956 D] Bank Security Unification(位运算优化dp)

problem cf链接 solution 读完题先直接暴力 dpdpdp 拿出来&#xff0c;dpimax⁡j<i{dpj(fi&fj)}dp_i\max_{j<i}\big\{dp_{j}(f_i\&f_j)\big\}dpi​maxj<i​{dpj​(fi​&fj​)}。 谁能优化谁就是爸爸 假设存在 j<k<ij<k<ij<k<i&…

P2403 [SDOI2010]所驼门王的宝藏

P2403 [SDOI2010]所驼门王的宝藏 题意&#xff1a; R * C的地图上有n个宝藏&#xff0c;给你n个宝藏的坐标&#xff0c;每个宝藏的位置上还有一个传送门&#xff0c;传送门有三种类型&#xff0c;1.可以传送到同行的其他宝藏位置&#xff0c;2.可以传送到同列的其他宝藏位置 …

分布式系统的构建原则

什么是构建一个可维护和可扩展的系统的意义&#xff1f;在早期&#xff0c;一个系统的形态&#xff0c;只是满足用户和服务器资源之间的通道&#xff0c;唯一要扩展和维护的是系统后面的资源&#xff0c;保证资源的可用和够用&#xff0c;而系统本身的压力并不大。系统设计跟我…

[HEOI2016TJOI2016]排序(二分+线段树)

problem 洛谷链接 solution 在一个丝毫没有单调性的问题中很难想到将其转化为二分。 二分最后在第 ppp 位置上的值 xxx。 然后将所有 ≥x\ge x≥x 的赋为 111&#xff0c;所有 <x<x<x 的赋为 000。 经过一系列区间排序操作后&#xff0c;最后我们只在乎第 ppp 位…

可持久化4--可持久化并查集

可持久化并查集 可持久化并查集 按秩合并并查集 可持久化数组 首先并查集不能采用路径压缩&#xff0c;这是因为一次findR操作中&#xff0c;fa数组的很多位置&#xff08;u->ru&#xff09;会发生修改&#xff0c;由于每次修改都需要在可持久化数组上复制产生log个新结…

ASP.NET Core 2.2中的Endpoint路由

在ASP.NET Core 2.2中&#xff0c;新增了一种路由&#xff0c;叫做Endpoint&#xff08;终结点&#xff09;路由。本文将以往的路由系统称为传统路由。本文通过源码的方式介绍传统路由和Endpoint路由部分核心功能和实现方法&#xff0c;具体功能上的差异见官方文档。在升级到AS…

AtCoder2063 [AGC005E] Sugigma The Showdown(博弈论)

problem 洛谷链接 solution 考虑一条 (u,v)(u,v)(u,v) 的红边&#xff0c;在蓝树上 u,vu,vu,v 两点距离 ≥3\ge 3≥3。 如果先手到达 u,vu,vu,v 其中任何一点且下一步后手行动无法抓住先手&#xff0c;那么这个游戏就将进入死循环了。 通过画图&#xff0c;你会发现这个结…

基于ASP.NET Core的模块化设计: 虚拟文件系统

土牛亲自录制的本文介绍视频Abp中文网(https://cn.abp.io/)提供翻译字幕基于ASP.NET Core的模块化设计: 虚拟文件系统简介创建模块化的应用程序很困难. 构建模块化的用户界面更加困难. 需要单独开发模块的页面和组件,但是最后要把它们集成在一起像单个UI一样创建这样的模块化架…

[SDOI2012]吊灯(结论)

problem 洛谷链接 solution 显然&#xff0c;颜色相同的灯泡形成一个连通块&#xff0c;且连通块的大小 i∣ni\mid ni∣n。 这道题要能发现一个结论&#xff1a;一定至少存在一种颜色的连通块 满足该联通块内的任意一个节点 都不是异种颜色点 的父亲。 即&#xff0c;至少…

一文带你全面认识Excel催化剂系列功能

2018年1月1日决定打造一款Excel插件&#xff0c;取名为Excel催化剂&#xff0c;历时半年的时间&#xff0c;在努力打造出和传统插件有功能差异化的基础上&#xff0c;让大家可以真正得到一些有价值非鸡肋的功能&#xff0c;对开发什么样的功能也构思了许久&#xff0c;同时对免…

可持久化汇总(讲解+题目)

可持久化(一) 可持久化(二) 可持久化3–可持久化01Trie 可持久化4–可持久化并查集 各模块的例题都在各自讲解下面有写 下面是加强练习 练习题讲解——肖然老师的博客 练习题&#xff1a; P4137 Rmq Problem / mex P4587 [FJOI2016]神秘数 CF484E Sign on Fence CF1080F Katya …

[学习笔记] 乱世之神杀疯了 —— K-D tree

文章目录K-D tree建树合并插入删除查询(估价函数)旋转坐标系题目练习[SDOI2012]最近最远点对[Violet]天使玩偶/SJY摆棋子[CQOI2016]K远点对[国家集训队]JZPFARThe closest M points简单题巧克力王国[BOI2007]Mokia 摩基亚[CH弱省胡策R2]TATT[BZOJ3815]卡常数[NOI2019]弹跳A sim…

【春华秋实】.NET Core之只是多看了你一眼

技术学习是一件系统性的事情&#xff0c;如果拒绝学习&#xff0c;那么自己就会落后以至于被替代。.NET也是一样&#xff0c;当开源、跨平台成为主流的时候&#xff0c;如果再故步自封&#xff0c;等待.NET的就是死路一条&#xff0c;幸好.NET Core问世了&#xff0c;社区反响积…

[SDOI2010]粟粟的书架

[SDOI2010]粟粟的书架 题意&#xff1a; 一个R * C的矩阵&#xff0c;每个位置都有个数page[ij]&#xff0c;现在选定一个小矩阵范围(给左上角坐标&#xff0c;和右下角坐标)&#xff0c;问这个范围内的数总和是否大于h&#xff0c;如果大于h的话最少选几个数aij 对于50%的数…

基于Asp.Net Core的简单社区项目源代码开源

2019年3月27号 更新版本 本项目基于 ASP.NET CORE 3.0EF CORE 3.0开发使用vs2019 sqlserver 2017(数据库脚本最低支持sql server 2012/)使用步骤:1.下载相关开发工具2.运行数据库脚本目录下的相关脚本3.默认前端账号密码: 18812345678 1234564.默认后台账号密码: admin 123456开…

[学习笔记] 如果你愿意学那么你是可以看的懂的 —— 群论与 burnside 引理和 polya 定理

群与子群 <G,op><G,op><G,op> 是一个群需要满足以下条件&#xff1a; opopop 是一个满足结合律的二元运算&#xff0c;如 *&#xff0c;。GGG 是一个集合&#xff0c;存在单位元 eee。GGG 中所有元素都有逆元。即 GGG 对 opopop 运算封闭&#xff0c;封闭简单…

P2469 [SDOI2010]星际竞速

P2469 [SDOI2010]星际竞速 题意&#xff1a; 有n个点&#xff0c;m个边&#xff0c;边是单向边(只能从小编号点到大编号点)&#xff0c;你也可以花费ai直接到达点i。问将1~n所有点都经过一边最小费用是多少&#xff1f; 题解&#xff1a; 最小费用最大流&#xff0c;网络流…

为什么从前那些.NET开发者都不写单元测试呢?

楔子四年前我虽然也写了很多年代码&#xff0c;由于公司虽然规模不小&#xff0c;却并非一家规范化的软件公司&#xff0c;因此在项目中严格意义上来说并没有架构设计、也不写单元测试&#xff0c;后来有幸加入了一家公司&#xff0c;这家公司虽然也是一家小公司&#xff0c;但…