考虑先找到一个原树的根。

对于第一种限制,bbb 不能作为根。

对于第二种限制,aaa 不能作为根。

找到可以作为根的一个点 rtrtrt,显然由于限制互不矛盾肯定能找到。

对于第一种限制先直接连边。

考虑在满足第一种限制的前提下尽量满足第二种限制:让连通的点作为 rtrtrt 的一棵子树,不连通的点在 rtrtrt 的不同子树内。

然后让那些连通的点往下递归去做即可。

#include<bits/stdc++.h>#define N 1010using namespace std;inline int read()
{int x=0,f=1;char ch=getchar();while(ch<'0'||ch>'9'){if(ch=='-') f=-1;ch=getchar();}while(ch>='0'&&ch<='9'){x=(x<<1)+(x<<3)+(ch^'0');ch=getchar();}return x*f;
}struct data
{int a,b;data(){};data(int aa,int bb){a=aa,b=bb;}
};int n,m1,m2,res[N];
int fa[N],id[N];
bool tim[N],ban[N];vector<data>v1,v2;int find(int x)
{return x==fa[x]?x:(fa[x]=find(fa[x]));
}int solve(vector<int> p)
{if(p.size()==1) return p[0];memset(ban,0,sizeof(ban));memset(tim,0,sizeof(tim));for(int u:p) tim[u]=1,fa[u]=u;for(int i=0;i<m1;i++)if(tim[v1[i].a]&&tim[v1[i].b])ban[v1[i].b]=1;for(int i=0;i<m2;i++)if(tim[v2[i].a]&&tim[v2[i].b])ban[v2[i].a]=1;int rt=-1;for(int u:p){if(!ban[u]){rt=u;break;}}assert(rt!=-1);for(int i=0;i<m1;i++)if(tim[v1[i].a]&&tim[v1[i].b]&&v1[i].a!=rt&&v1[i].b!=rt)fa[find(v1[i].a)]=find(v1[i].b);vector<vector<int> >pp;for(int u:p){if(u==rt) continue;if(fa[u]==u){id[u]=pp.size();pp.push_back(vector<int>());}}for(int u:p){if(u==rt) continue;pp[id[find(u)]].push_back(u);}for(auto np:pp) res[solve(np)]=rt;return rt;
}int main()
{n=read(),m1=read(),m2=read();for(int i=1;i<=m1;i++){int a=read(),b=read();v1.push_back(data(a,b));}for(int i=1;i<=m2;i++){int a=read(),b=read();v2.push_back(data(a,b));}vector<int>v;for(int i=1;i<=n;i++) v.push_back(i);int rt=solve(v);for(int i=1;i<=n;i++)if(i!=rt&&!res[i])res[i]=rt;for(int i=1;i<=n;i++)printf("%d ",res[i]);return 0;
}

【XSY2912】reo(构造)相关推荐

  1. online-DDL详细原理介绍及gh-ost讲解

    文章目录 1. MySQL online DDL 各版本介绍 1.1 online DDL in mysql 5.5 1.2 online DDL in mysql5.6 1.3 online DDL ...

  2. LeetCode简单题之构造矩形

    题目 作为一位web开发者, 懂得怎样去规划一个页面的尺寸是很重要的. 所以,现给定一个具体的矩形页面面积,你的任务是设计一个长度为 L 和宽度为 W 且满足以下要求的矩形的页面.要求: 你设计的矩形 ...

  3. 兑换量子计算机,阅读 | 【量子计算机】构造置换量子门

    原标题:阅读 | [量子计算机]构造置换量子门 量子计算机的一个基本组成单位叫量子门(quantum gate),下面简单介绍些基本概念. 量子比特和量子态 量子计算机的信息存储单元是一种叫做量子比特 ...

  4. [ActionScript 3.0] AS向php发送二进制数据方法之——在URLRequest中构造HTTP协议发送数据...

    主类 HTTPSendPHP.as 1 package 2 { 3 import com.JPEGEncoder.JPGEncoder; 4 import com.fylib.httpRequest. ...

  5. js把base64串解析成中文_回文问题终极篇:最小代价构造回文串

    学算法认准 labuladong 东哥带你手把手撕力扣? 点击下方卡片即可搜索? 读完本文,你可以去力扣完成第 1312 题「让字符串成为回文串的最少插入次数」,难度 Hard. 回文串就是正着读反着 ...

  6. php构造和析构方法,php5构造函数与析构函数实例

    自php5起,有了构造函数与析构函数. 这使得php更富有面向对象的魅力了. 在php4时,构造函数用的是与类同名的函数来进行构造这个动作. 例如: 复制代码 代码示例: /* * myclass.p ...

  7. 消除左递归实验代码_「leetcode」108. 构造二叉搜索树【递归】【迭代】详解!

    构造二叉搜索树,一不小心就平衡了 ❞ 108.将有序数组转换为二叉搜索树 将一个按照升序排列的有序数组,转换为一棵高度平衡二叉搜索树. 本题中,一个高度平衡二叉树是指一个二叉树每个节点 的左右两个子树 ...

  8. 对象特性--构造函数调用规则

    默认情况下,C++编译器至少给一个类添加3个函数: 1.默认构造函数(无参,函数体为空) 2.默认析构函数(无参,函数体为空) 3.默认拷贝构造函数,对属性进行值拷贝 1.创建一个类,C++编译器会给 ...

  9. C++派生类与基类构造函数调用次序

    本文用来测试C++基类和派生类构造函数,析构函数,和拷贝构造函数的调用次序. 运行环境:SUSE Linux Enterprise Server 11 SP2  (x86_64) #include & ...

最新文章

  1. 【Treap】bzoj1588-HNOI2002营业额统计
  2. pt-tools系统:pt-kill 实战
  3. python使用matplotlib可视化使用subplots子图、subplots绘制子图并为可视化的子图添加主标题(subplots main title)
  4. python声音分类_Python音频信号分类MFCC特征神经网络
  5. golang获取变量地址值和指针变量示例
  6. 对称加密-DES加密
  7. jpa 使用jdbc_在JPA和JDBC中使用存储过程。 嗯,只要使用jOOQ
  8. 铁血规则:事件预订与取消预订
  9. SpringBoot集成Flowable_Jsite已办任务菜单报500
  10. Linux 系统性能分析工具图解读
  11. react-native技术调研:react-native是什么?
  12. 2.看板方法---什么是看板方法
  13. python打印右对齐_python右对齐的实例方法
  14. 那些唱衰智能电视的砖家们可以闭嘴了
  15. Codeforces Round #253 DIV1 C 馋
  16. ip雷达3.0_本周在我们的雷达上:轻松如1.0、2.0、3.0
  17. SpringBoot整合Dubbo
  18. SEER区块链database_api更新 支持通过txid查询交易所在区块信息
  19. Android开发者指南
  20. SQL、DB、DBMS分别是什么,他们之间的关系?

热门文章

  1. win10自动更新0x8024002E解决
  2. python matplotlib画图报错:Unknown projection ‘3d‘
  3. 魔兽争霸 怎么窗口化
  4. 1028 人口普查 (20 分)测试点3格式错误
  5. 求职记录【又名求职杯具史】~
  6. 2016——再见,再也不见
  7. Docker和docker-compose安装脚本-Ubuntu16.04
  8. 70句经典爱情语录:爱情总是在患得患失的时候最美好!
  9. 数天而不是数周的真实应用
  10. 最新【独家沙龙内容整理】机器女友?—百度微软讯飞等顶级专家谈人机对话黑科技及未来 ——by中科院孢子创客空间