description

戳我看题目

solution

正解说是欧拉回路,但是于私而言非常难懂,如果有兴趣可以看香香mm的博客
定义一个点如果有偶数个儿子,就为奇点;如果有奇数个儿子,就为偶点
对于一个点的每个子树自身是满足mod2=1mod\ 2=1mod 2=1的

如果是偶点,那么奇数个儿子相加mod2mod\ 2mod 2就已经满足要求了,点权就设为000
如果是奇点,那么偶数个儿子相加取模就没了,点权应该设为±1±1±1

单思考一个子树的情况,算上自己,整棵树内的奇点个数应为2k+12k+12k+1
随便两两匹配后一定会孤出一个点来
这个点就通过uuu点往上跟某一个孤的祖先匹配

两两匹配的点对就分别取1,−11,-11,−1,二分图染色可以搞

code

#include <cstdio>
#include <vector>
#include <iostream>
using namespace std;
#define maxn 100005
int f[maxn], c[maxn], rnk[maxn];int find( int u ) {if( u == f[u] ) return u;int fa = find( f[u] );c[u] ^= c[f[u]];return f[u] = fa;
}void merge( int u, int v ) { //并查集按秩合并 int fu = find( u ), fv = find( v );if( fu == fv ) return;else if( rnk[fu] < rnk[fv] ) swap( fu, fv );else if( rnk[fu] == rnk[fv] ) rnk[fu] ++;c[fv] = c[u] ^ c[v] ^ 1;f[fv] = fu;
} struct node {vector < int > G[maxn];int siz[maxn];int root;void init( int n ) {for( int i = 1, fa;i <= n;i ++ ) {scanf( "%d", &fa );if( ~ fa ) G[fa].push_back( i ), siz[fa] ++;else root = i;}}int dfs( int u ) {vector < int > num;if( ! ( siz[u] & 1 ) ) num.push_back( u );//有偶数个儿子 即奇点 for( int i = 0;i < G[u].size();i ++ )num.push_back( dfs( G[u][i] ) );for( int i = 1;i < num.size();i += 2 ) //一定是2k+1个点 两两匹配 孤出一个点与上面祖先匹配merge( num[i], num[i + 1] );return num[0]; }}A, B;int main() {int n;scanf( "%d", &n );A.init( n ), B.init( n );for( int i = 1;i <= n;i ++ )if( ( A.siz[i] + B.siz[i] ) & 1 ) //i点在两棵树上的奇偶性应一致 return ! printf( "IMPOSSIBLE\n" );printf( "POSSIBLE\n" );for( int i = 1;i <= n;i ++ ) f[i] = i;A.dfs( A.root ), B.dfs( B.root );for( int i = 1;i <= n;i ++ )if( ! ( A.siz[i] & 1 ) ) {find( i );if( c[i] ) printf( "1 " );else printf( "-1 " );}else printf( "0 " );return 0;
}

AT2675 [AGC018F] Two Trees (构造+二分图染色+并查集)相关推荐

  1. AT2675 [AGC018F] Two Trees(欧拉回路)

    AT2675 [AGC018F] Two Trees 首先我们看到1或-1,那么就是限制差距在1以内,然后我们可以想到构造一些东西来满足这种东西,然后我们经常利用的就是欧拉回路. 首先这是两个树,然后 ...

  2. Codeforces Round #742 (Div. 2) F. One-Four Overload 构造 + 二分图染色

    传送门 文章目录 题意: 思路: 题意: 给你一个n∗mn*mn∗m的矩形,包含...和XXX,你有两种颜色,你需要给...染色使得每个XXX上下左右相邻的...其两种颜色个数相同,输出一种合法方案. ...

  3. AtCoder Regular Contest 063 E - Integers on a Tree 构造 + 二分图染色

    传送门 题意: 给你一颗nnn个点的树,初始的时候某些点有权值pip_ipi​,现在你需要给没给定的点赋一个权值,使得任意相邻点权值之差的绝对值等于111,若无解输出NoNoNo. 1≤n≤1e5,1 ...

  4. 4075. 染色 并查集的运用 并查集运用的小细节

    题目 题解思路 这题思路还是比较明显的,将颜色需要相同的气球全部并查起来,在搜索集合中颜色最多的颜色,将其他的也染成这个.这样贪心就能保证使用的染色最少. 时间复杂度为On,看起来这样复杂很高,实际上 ...

  5. BZOJ 2303: [Apio2011]方格染色 [并查集 数学!]

    题意: $n*m:n,m \le 10^6$的网格,每个$2 \times 2$的方格必须有1个或3个涂成红色,其余涂成蓝色 有一些方格已经有颜色 求方案数 太神了!!!花我三节课 首先想了一下只有两 ...

  6. E - Ginger的染色(并查集 + 轮换序列)

    主要是判断该序列中有无元素个数为奇数的轮换序列,可以用并查集来找,这里另外写一种方法 ACcode // #pragma GCC optimize (2) // #pragma G++ optimiz ...

  7. cdoj 1328 卿学姐与诡异村庄 Label:并查集 || 二分图染色

    卿学姐与诡异村庄 Time Limit: 4500/1500MS (Java/Others)     Memory Limit: 65535/65535KB (Java/Others) Submit  ...

  8. CF1444C Team-Building(可持久化并查集)(二分图)

    解析 容易想到补集思想,寻找那些组之间不能形成二分图 二分图一般的两个判定方法: 染色 并查集 这里考虑并查集(看题解似乎染色也可做) 先把所有组内的边合并并查集 如果某个组自己内部就有奇环,显然不能 ...

  9. 【Hitachi2020C】ThREE【构造】【二分图染色】

    传送门 题意:给一棵nnn个结点的树,构造一个nnn阶排列ppp,使得所有距离为333的点对(i,j)(i,j)(i,j)满足pi+pjp_i+p_jpi​+pj​和pipjp_ip_jpi​pj​至 ...

最新文章

  1. 【知识图谱】知识表示:知识图谱如何表示结构化的知识?
  2. android:persistent (非系统app失效)
  3. Abp mysql guid_ABP领域层 – 值对象 - ABP 中文文档
  4. C# winform post请求数据
  5. python __import__和import区别_Python中import 与__import__() 之间的区别比较
  6. java操作Excel实现读写
  7. Mybatis-config.xml配置文件详解
  8. 【三维路径规划】基于matlab改进的粒子滤波无人机三维航迹规划【含Matlab源码 1527期】
  9. 中国34个省市用字体logo 石昌鸿 字体设计-借用手法
  10. 采用高通CRS8635的一款蓝牙耳机低功耗评测数据,供交流讨论!
  11. 十进制与二进制相互转换(c++)
  12. 计算机摇号分析,北京市小客车指标管理信息系统
  13. 我是这样手写Spring的,麻雀虽小五脏俱全
  14. 关于梯度下降与Momentum通俗易懂的解释
  15. Excel批量修改数据透视表值字段设置
  16. 在linux中运行安卓程序
  17. ubuntu20.04安装到u盘+配置美化
  18. Android App 可以定时启动! 并且完成短信自动发送获取内容功能 (以获取闪讯密码为例 大学宿舍宽带)
  19. SCSI/iSCSI及SAS、NAS、SAN的基本介绍
  20. GMT6.1.1安装流程

热门文章

  1. 使用aconda3-5.1.0(Python3.6.4) 搭建pyspark远程部署
  2. java aop execution_Spring AOP -- execution表达式
  3. android activity解耦,Android与设计模式:用单一职责原则为Activity解耦
  4. solr 配置mysql数据源_solr data-config.xml配置文件的见解mysql数据源
  5. 没找到rpm命令_Mysql的命令总结和PyMysql
  6. 跨部门不配合工作_跨部门协作,队友总是“甩锅”,这三个方法教你快速避坑!...
  7. java的scanner的方法_Java Scanner reset()方法
  8. 算法题目——生成括号匹配
  9. int函数在Oracle,vb中int是什么意思 ?
  10. 7-2 批处理作业调度 (10 分)(思路+详解)