题意:乱序给你树上的每一个节点与之相距<=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的更多相关文章

  1. Codeforces.566E.Restoring Map(构造)

    题目链接 \(Description\) 对于一棵树,定义某个点的邻居集合为所有距离它不超过\(2\)的点的集合(包括它自己). 给定\(n\)及\(n\)个点的邻居集合,要求构造一棵\(n\)个点的 ...

  2. @codefoces - 566E@ Restoring Map

    目录 @description@ @solution@ @accepted code@ @details@ @description@ 对于一棵 n 个点的树,我们称两个点是相邻的当且仅当两个点的距离 ...

  3. Codeforces 566E - Restoring Map(bitset 优化构造)

    Codeforces 题目传送门 & 洛谷题目传送门 本来说好的不做,结果今早又忍不住开了道题/qiao 我们称度为 \(1\) 的点为叶节点,度大于 \(1\) 的点为非叶节点. 首先考虑如 ...

  4. WC2021 题目清单

    Day2 上午 <IOI题型与趣题分析> 来源 题目 完成情况 备注 IOI2002 Day1T1 Frog 已完成 IOI2002 Day1T2 Utopia IOI2002 Day1T ...

  5. Tree Restoring

    Tree Restoring Time limit : 2sec / Memory limit : 256MB Score : 700 points Problem Statement Aoki lo ...

  6. Backing Up and Restoring HBase Data

    There are two strategies for backing up HBase:1> Backing it up with a full cluster shutdown2> ...

  7. PatentTips – GPU Saving and Restoring Thread Group Operating State

    BACKGROUND OF THE INVENTION The present invention relates generally to single-instruction, multiple- ...

  8. mapreduce中一个map多个输入路径

    package duogemap; import java.io.IOException; import java.util.ArrayList; import java.util.List; imp ...

  9. .NET Core中间件的注册和管道的构建(3) ---- 使用Map/MapWhen扩展方法

    .NET Core中间件的注册和管道的构建(3) ---- 使用Map/MapWhen扩展方法 0x00 为什么需要Map(MapWhen)扩展 如果业务逻辑比较简单的话,一条主管道就够了,确实用不到 ...

随机推荐

  1. 数据索引文件idx

    数据索引文件idx 数据索引文件idx 数据索引文件idx

  2. 前端学习(二十三)DOM操作,事件(笔记)

    javascript 组成部分    1.ECMAScript        javascript的核心解释器 2.DOM        Document Object Modle         文 ...

  3. function的各做写法

    function(){}()让变量快速初始化结果 var timestamp = function(){ var timestamp = Date.parse(new Date()); return ...

  4. nodejs npm 常用配置

    npm install moduleNames : 安装 Node 模块.node安装分为全局模式和本地模式. npm install -g moduleName.npm install expres ...

  5. 工程师技术(六):Linux工程师 综合测试

    一.Linux工程师 综合测试 目标: 根据本文提供的练习步骤完成所有练习案例. 方案: 开始练习之前,先依次重置虚拟机环境. [root@room9pc13 ~]# rht-vmctl  reset ...

  6. C++ Compiling… Error spawning cl.exe

    转自VC错误:http://www.vcerror.com/?p=500 解决方法: 方法(一): 启动VC时不要用图形界面,通过在命令提示符下输入:Msdev /useenv运行(注意啦/前面有个空 ...

  7. D3DPT_TRIANGLESTRIP 与 D3DPT_TRIANGLEFAN 的区别

    D3DPT_TRIANGLESTRIP D3DPT_TRIANGLEFAN http://community.fortunecity.ws/skyscraper/sun/575/Programs/D3 ...

  8. GDB can't continue if no space left

    [root@premta ~]# df -hFilesystem Size Used Avail Use% Mounted on/dev/sda3 36G 36G 0 100% /tmpfs 1.5G ...

  9. libVEX学习

    VEX IR是一种更加接近于compiler使用的中间语言/中间表示,它是不依赖于特定体系架构的. 1. Code Blocks code blocks是VEX处理代码的一个单元,使用IRSB结构体表 ...

  10. DataFrame读取CSV文件

    读取csv的代码: print pd.read_csv("ex1.csv") print "\n" print "Can also use read ...