Description:

给定n个点的序列,一开始有n个块,每次将两个块合并,并告诉你这两个块中的一对元素,求一种可能的原序列

Hint:

\(n \le 1.5*10^5\)

Solution:

实在是SB题
考虑把每对点的祖先连上一个虚点,用并查集维护,最后dfs所得的树就行
为什么是对的,因为这棵树会按时间顺序由下往上合并节点
好像还有一种做法,对每个块的祖先维护一个vector表示顺序,合并时启发式合并,复杂度\(O(nlogn)\)


#include <map>
#include <set>
#include <stack>
#include <cmath>
#include <queue>
#include <cstdio>
#include <cstring>
#include <cstdlib>
#include <iostream>
#include <algorithm>
#define ls p<<1
#define rs p<<1|1
using namespace std;
typedef long long ll;
const int mxn=1e6+5; //空间开大点
int n,hd[mxn],f[mxn],p,cnt;
inline int read() {char c=getchar(); int x=0,f=1;while(c>'9'||c<'0') {if(c=='-') f=-1;c=getchar();}while(c<='9'&&c>='0') {x=(x<<3)+(x<<1)+(c&15);c=getchar();}return x*f;
}
inline int chkmax(int &x,int y) {if(x<y) x=y;}
inline int chkmin(int &x,int y) {if(x>y) x=y;}struct ed {int to,nxt;
}t[mxn<<1];inline void add(int u,int v) {t[++cnt]=(ed) {v,hd[u]}; hd[u]=cnt;
}inline int find(int x)
{return f[x]==x?x:f[x]=find(f[x]);
}void dfs(int u)
{if(u<=n) printf("%d ",u); for(int i=hd[u];i;i=t[i].nxt) {int v=t[i].to;dfs(v);}
}int main()
{n=read(); p=n; int u,v,x,y;for(int i=1;i<=mxn-2;++i) f[i]=i;for(int i=1;i<n;++i) {u=read(); v=read();x=find(u),y=find(v);f[x]=f[y]=++p;add(p,x); add(p,y);}dfs(p);return 0;
}

转载于:https://www.cnblogs.com/list1/p/10509912.html

[CF1131F] Asya And Kittens相关推荐

  1. CF1131F Asya And Kittens

    [Luogu-CF1131F] 给定n个点的序列,一开始有n个块,每次将两个块合并,并告诉你这两个块中的一对元素,求一种可能的原序列 我们可以建立一个由多个二叉树组成的森林,并用并查集维护每个节点所在 ...

  2. 【CodeForces - 1131F 】Asya And Kittens(并查集,思维)

    题干: Asya loves animals very much. Recently, she purchased nn kittens, enumerated them from 11 and nn ...

  3. Asya And Kittens

    https://codeforces.com/contest/1131/problem/F 题解:并查集+路径压缩+DFS+树 /* *@Author: STZG *@Language: C++ */ ...

  4. F. Asya And Kittens

    http://codeforces.com/contest/1131/problem/F 题意:有n只猫相邻有隔板隔着,n-1对(x,y)输入表示取下某一隔板能使x与y猫在一起,取下后两笼合并,里面的 ...

  5. php网页爬虫-简单的类

    class PhpSpiders { public $useragent ; //user-agent public $title ; // 标题 public $encoding ; //编码 pu ...

  6. Codeforces Round #541 (Div. 2)

    Codeforces Round #541 (Div. 2) 题号 题目 知识点 A Sea Battle 思维 B Draw! 贪心模拟 C Birthday 思维 D Gourmet choice ...

  7. Codefroces1077F2. Pictures with Kittens (hard version)

    Codefroces1077F2. Pictures with Kittens (hard version) 做法:裸的单调队列优化dp #include <bits/stdc++.h> ...

  8. Codeforces 1077F2 Pictures with Kittens (hard version)(DP+单调队列优化)

    题目链接:Pictures with Kittens (hard version) 题意:给定n长度的数字序列ai,求从中选出x个满足任意k长度区间都至少有一个被选到的最大和. 题解:数据量5000, ...

  9. Codeforces Round #521 (Div. 3): F. Pictures with Kittens(DP+单调队列)

    题意: 你有n幅画,第i幅画的好看程度为ai,再给你两个数字k,x,表示你要从中选出刚好x幅画,并且相邻两幅画的距离不能≥k,好看程度之和最大能多少,选不出来输出-1,F1数据范围<200,F2 ...

最新文章

  1. 钉钉头像大小设置 阿里cdn尺寸截取参数设置
  2. ubuntu压缩命令
  3. ZooKeeper增加Observer部署模式提高性能(转)
  4. postgresql创建表
  5. msyql request quit
  6. ArchSummit2018深圳站筹备中,18大专题征集演讲嘉宾
  7. 软考高项之学习笔记——质量成本概念
  8. 每周分享第7期(2019.5.18)
  9. Springboot直接访问templates中的html
  10. 职场‘下班沉默症’调查
  11. echarts的x轴数量固定_联轴器 多节膜片式夹紧螺丝固定型 DAAPC(对应LK5CWP)
  12. 眼图观测实验报告_眼图观察测量实验
  13. ssm(springMVC + spring+MyBatis) 小例
  14. 大数据技术之kafka (第 3 章 Kafka 架构深入) Kafka 事务
  15. 【C语言】请输入一个n(n=10)并输出一个n行n列的杨辉三角
  16. linux定时器跑命令,linux下运行定时器(cron/centos/js脚本)
  17. 佛系听歌?Beats推出“串珠”耳机 盘它?
  18. 大工13秋 c/c++语言程序设计 在线作业3,大工19秋《JavaScript基础教程与应用》在线作业3【满分答案】...
  19. 计算机语言echo off什么意思,批处理文件的@echo off是什么意思?
  20. 任正非,马云,马化腾:真正顶级厉害的人,都有一个共同特点

热门文章

  1. js-排序-对象key自动排序问题
  2. 查询数据库重复记录方法
  3. kubernetes节点维护命令——cordon, drain, uncordon
  4. 大数据查询分析引擎比较
  5. 面试问题:发一个随机红包,100块钱给10个人。每个人最多12块钱,最少6块钱。怎么分?
  6. 2022年登高架设操作证考试题及在线模拟考试
  7. 开源物联网平台ThingsBoard数据库40张数据表设计一览
  8. Origin制图之热力图(hot-map)
  9. 小型企业5种实惠的品牌建立策略
  10. Linux中samba配置和windows映射Linux驱动盘