CF566E Restoring Map
题意:乱序给你树上的每一个节点与之相距<=2的节点集合(并不知道这具体是哪个节点)。
还原整棵树。
标程:
#include<bits/stdc++.h>
#define P pair<int,int>
#define fir first
#define sec second
using namespace std;
const int N=;
vector<P> vec[N];
bitset<N> bit[N];
int n,f[*N],x,u,v,k;
int find(int x){return x==f[x]?x:f[x]=find(f[x]);}
void merge(int x,int y){f[find(x)]=find(y);}
int main()
{
scanf("%d",&n);
for (int i=;i<=n;i++)
{
scanf("%d",&k);
while (k--) scanf("%d",&x),bit[x][i]=;
}
if (n==) return puts("1 2"),;
for (int i=;i<=*n;i++) f[i]=i;
for (int i=;i<=n;i++)
for (int j=i+;j<=n;j++)
{
int cnt=(int)(bit[i]&bit[j]).count();
if (cnt==) merge(i,j),merge(i+n,j+n);
else if (cnt==) merge(i+n,j),merge(i,j+n);
else vec[cnt].push_back(P(i,j));
}
if (vec[n].size()==n*(n-)/)//特判星
{
for (int i=;i<=n;i++) printf("1 %d\n",i);
return ;
}
if (vec[n].size()==)//特判流星锤
{
printf("%d %d\n",u=vec[n][].fir,v=vec[n][].sec);
for (int i=;i<=n;i++)
if (i!=u&&i!=v) {merge(i,u),merge(i+n,u+n),merge(i+n,v),merge(i,v+n);break;}
for (int i=;i<=n;i++)
if (i!=u&&i!=v)
if (find(i)==find(u)) printf("%d %d\n",i,u);else printf("%d %d\n",i,v);
return ;
}
for (int i=n;i>=;i--)
for (int j=;j<vec[i].size();j++)
if (u=vec[i][j].fir,v=vec[i][j].sec,find(u)!=find(v))
{
printf("%d %d\n",u,v);
merge(u+n,v);merge(u,v+n);
}
return ;
}
注意有很多特判:n=2,星星图,流星锤图(后两个由于不满足贪心)。
题解:贪心+染色
考虑对相邻节点集合取交,设大小为cnt。若cnt=1,这两个点必同色;cnt=2,必异色。剩下的存入一个vector。然后按cnt从大到小枚举两点,如果他们不在同色区间中,相信它们之间有边。并更新并查集。
CF566E Restoring Map的更多相关文章
- Codeforces.566E.Restoring Map(构造)
题目链接 \(Description\) 对于一棵树,定义某个点的邻居集合为所有距离它不超过\(2\)的点的集合(包括它自己). 给定\(n\)及\(n\)个点的邻居集合,要求构造一棵\(n\)个点的 ...
- @codefoces - 566E@ Restoring Map
目录 @description@ @solution@ @accepted code@ @details@ @description@ 对于一棵 n 个点的树,我们称两个点是相邻的当且仅当两个点的距离 ...
- Codeforces 566E - Restoring Map(bitset 优化构造)
Codeforces 题目传送门 & 洛谷题目传送门 本来说好的不做,结果今早又忍不住开了道题/qiao 我们称度为 \(1\) 的点为叶节点,度大于 \(1\) 的点为非叶节点. 首先考虑如 ...
- WC2021 题目清单
Day2 上午 <IOI题型与趣题分析> 来源 题目 完成情况 备注 IOI2002 Day1T1 Frog 已完成 IOI2002 Day1T2 Utopia IOI2002 Day1T ...
- Tree Restoring
Tree Restoring Time limit : 2sec / Memory limit : 256MB Score : 700 points Problem Statement Aoki lo ...
- Backing Up and Restoring HBase Data
There are two strategies for backing up HBase:1> Backing it up with a full cluster shutdown2> ...
- PatentTips – GPU Saving and Restoring Thread Group Operating State
BACKGROUND OF THE INVENTION The present invention relates generally to single-instruction, multiple- ...
- mapreduce中一个map多个输入路径
package duogemap; import java.io.IOException; import java.util.ArrayList; import java.util.List; imp ...
- .NET Core中间件的注册和管道的构建(3) ---- 使用Map/MapWhen扩展方法
.NET Core中间件的注册和管道的构建(3) ---- 使用Map/MapWhen扩展方法 0x00 为什么需要Map(MapWhen)扩展 如果业务逻辑比较简单的话,一条主管道就够了,确实用不到 ...
随机推荐
- jQuery实现网页放大镜功能 转载
京东等电商网站中可以对商品进行放大观察,本文要实现的就是模仿这个放大镜功能,大致效果如下图所示: 简要说明实现思路: 1.原图窗口与放大窗口插入的是同一个图片,不过原图窗口的图片要适当缩小,放大窗口图 ...
- Clip
网页中的渲染是由CSS来实现,CSS2就不说了,那个没得说的,最常用的就是个颜色布局什么的. CSS3 自从有了CSS3,相比CSS2变得更具有活力了,CSS3没有什么方法函数的,它跟CSS2一样也是 ...
- Qt 【widget如何铺满窗口】
刚接触qt不是很长时间,都是使用ui拖拽控件实现界面,然后发现有些问题就是控件一旦多了起来,拖拽就不好控制了,然后就转而使用纯代码开发. 一下是碰到第一个问题: 创建一个MainWidget; Mai ...
- MYSQL中判断函数有哪些
新建一张客户表,如下:sex:1-男,2-女,3-未知:level是客户的级别:1-超级VIP客户,2-VIP客户,3-普通客户 方式一:case函数:流程控制函数 用法一: CASE express ...
- 适配器模式Adapter
原创转载请注明出处:https://www.cnblogs.com/agilestyle/p/11401410.html 1. 定义将一个类的接口转换成客户希望的另外一个接口.适配器模式使得原本由于接 ...
- Linux eth0, eth1, ..., eth%d 的生成【转】
转自:https://blog.csdn.net/xiruanliuwei/article/details/78765255 一直很好奇,Linux下的eth0, eth1,eth2等是如何生成的~ ...
- spring data jpa sql
CREATE TABLE cst_customer ( cust_id bigint(32) NOT NULL AUTO_INCREMENT COMMENT '客户编号(主键)', cust_name ...
- 【Flutter学习】可滚动组件之ScrollView
一,概述 ScrollView 是一个带有滚动的视图组件. 二,组成部分 ScrollView 由三部分组成: Scrollable - 它监听各种用户手势并实现滚动的交互设计.可滚动Widget都直 ...
- Python基础教程(006)--Python的特点
前言 了解Python背景,明白Python在目前社会中的标准库是有成千上万的Python爱好者共同维护的. 知识点 Python是完全面相对象的语言 函数,模块,数字,字符串都是对象,在Python ...
- 服务器一般达到多少QPS比较好?
每秒查询率QPS是对一个特定的查询服务器在规定时间内所处理流量多少的衡量标准,在因特网上,作为域名系统服务器的机器的性能经常用每秒查询率来衡量. 原理:每天80%的访问集中在20%的时间里,这20%时 ...