【CodeForces】576 B. Invariance of Tree
【题意】给定n个数的置换,要求使n个点连成1棵树,满足u,v有边当且仅当a[u],a[v]有边,求一种方案或无解。n<=10^5。
【算法】数学 置换
【题解】置换可以分解成若干循环,那么两个点的连边本质上是两个循环之间的连边。
因为要求无环(树),易知所有循环长度必须为偶数(这里不包括最后的情况1)。
那么循环之间通过连边形成一棵树后,最后的问题是必须至少存在一个循环内部相互连边。(不可能通过循环之间的连边使得循环内部连边,否则循环之间的连边就会构成环)
即,至少存在一个循环的长度为1或2才能实现,其它所有循环都向这个中心循环连边就可以满足要求。
那么,有以下结论:
1.存在长度为1的循环,其它循环向其连边,得解。
2.存在长度为2的循环,且不存在>1的奇数长度的循环,其它循环向其连边(交替),得解。
3.否则,无解。
例如,(4,2,1,3)=>(1,2) (3,2) (4,2) (6,5,4,3,1,2)=>(1,3) (6,4) (2,3) (5, 4)
#include<cstdio>
#include<algorithm>
using namespace std;
const int maxn=;
int n,a[maxn],b[maxn];
bool vis[maxn];
int main(){
scanf("%d",&n);
for(int i=;i<=n;i++)scanf("%d",&a[i]);
int x=,y;
for(int i=;i<=n;i++)if(!vis[i]){
int j=i,len=,h=;
while(!vis[j]){
vis[j]=;
len++;
b[j]=h;
h=-h;
j=a[j];
}
if(len==)x=,y=i;else
if(len==&&x!=-&&x!=)x=,y=i;else
if(len%==&&x!=)x=-;
}
if(x<=){printf("NO");return ;}
if(x==){
printf("YES\n");
for(int i=;i<=n;i++)if(i!=y)printf("%d %d\n",i,y);
}
else{
printf("YES\n%d %d\n",y,a[y]);
for(int i=;i<=n;i++)if(i!=y&&i!=a[y])printf("%d %d\n",i,b[i]?y:a[y]);
}
return ;
}
【CodeForces】576 B. Invariance of Tree的更多相关文章
- 【CodeForces】576 D. Flights for Regular Customers
[题目]D. Flights for Regular Customers [题意]给定n个点m条边的有向图,每条边有di表示在经过该边前必须先经过di条边,边可重复经过,求1到n的最小经过边数.n,m ...
- 【CodeForces】576 C. Points on Plane
[题目]C. Points on Plane [题意]给定坐标系中n个点的坐标(范围[0,10^6]),求一种 [ 连边形成链后总长度<=2.5*10^9 ] 的方案.n<=10^6. [ ...
- 【CodeForces】914 E. Palindromes in a Tree 点分治
[题目]E. Palindromes in a Tree [题意]给定一棵树,每个点都有一个a~t的字符,一条路径回文定义为路径上的字符存在一个排列构成回文串,求经过每个点的回文路径数.n<=2 ...
- 【LeetCode】Minimum Depth of Binary Tree 二叉树的最小深度 java
[LeetCode]Minimum Depth of Binary Tree Given a binary tree, find its minimum depth. The minimum dept ...
- 【BZOJ2843】极地旅行社(Link-Cut Tree)
[BZOJ2843]极地旅行社(Link-Cut Tree) 题面 BZOJ 题解 \(LCT\)模板题呀 没什么好说的了.. #include<iostream> #include< ...
- 【BZOJ4530】大融合(Link-Cut Tree)
[BZOJ4530]大融合(Link-Cut Tree) 题面 讨厌权限题!!! Loj链接 题目描述 小强要在 N个孤立的星球上建立起一套通信系统.这套通信系统就是连接 N个点的一个树.这个树的边是 ...
- 【BZOJ1969】航线规划(Link-Cut Tree)
[BZOJ1969]航线规划(Link-Cut Tree) 题面 BZOJ 题解 删边操作 套路呀 离线读入倒过来做 变成加边操作 现在考虑怎么确定两点直接的关键路径条数 如果是一棵树,那么每条边都是 ...
- 【BZOJ4825】【HNOI2017】单旋(Link-Cut Tree)
[BZOJ4825][HNOI2017]单旋(Link-Cut Tree) 题面 题面太长,懒得粘过来 题解 既然题目让你写Spaly 那就肯定不是正解 这道题目,让你求的是最大/最小值的深度 如果有 ...
- 【BZOJ3669】【Noi2014】魔法森林(Link-Cut Tree)
[BZOJ3669][Noi2014]魔法森林(Link-Cut Tree) 题面 题目描述 为了得到书法大家的真传,小 E 同学下定决心去拜访住在魔法森林中的隐 士.魔法森林可以被看成一个包含 n ...
随机推荐
- Java 异常总结
Throwablede类是 Java 语言中所有错误或异常的超类. 两个子类的实例,Error 和 Exception Error 是 Throwablede 的子类,用于指示合理的应用程序不应该试图 ...
- app测试更多机型系统解决方法
手头上测试机有限,不可能每个机型每个系统都 有一部手机,此时寻求一个什么都有的测试平台就显得尤为重要了. 作为小白的我刚刚使用了一波腾讯优测,简单粗暴有效给力,而且新注册认证用户还有60min免费使用 ...
- maven 实践 :管理依赖
有人认为Maven是一个依赖管理工具,当然这种想法是错误的(确切的说Maven是一个项目管理工具,贯穿了整个项目生命周期,编译,测试,打包,发布...),但Maven给人造成这种错误的印象也是有原因的 ...
- paoding-rose 之 maven配置
<dependency> <!-- junit 4.7 --> <groupId>junit</groupId> <artifactId>j ...
- python3.6 SSL module is not available
pip is configured with locations that require TLS/SSL, however the ssl module in Python is not avail ...
- 第98天:CSS3中transform变换详解
transform变换详解 本文主要介绍变形transform. Transform字面上就是变形,改变的意思.在CSS3中transform主要包括以下几种:旋转rotate.扭曲skew.缩放sc ...
- 集成学习—boosting和bagging异同
集成学习 集成学习通过构建并结合多个学习器来完成学习任务.只包含同种类型的个体学习器,这样的集成是“同质”的:包含不同类型的个体学习器,这样的集成是“异质”的.集成学习通过将多个学习器进行结合,常可获 ...
- BZOJ5091 摘苹果(概率期望)
大胆猜想每一步都相当于是第一步.稍微验证一下发现是对的.就做完了. #include<iostream> #include<cstdio> #include<cmath& ...
- 获取http和ftp地址的图片
根据http和ftp图片地址获取对应图片的缩略图和原图 public class GetBitmapImageClass { public BitmapSource GetImageHttp(stri ...
- Qt浅谈内存泄露(总结)
Qt浅谈内存泄露(总结) 来源 http://blog.csdn.net/taiyang1987912/article/details/29271549 一.简介 Qt内存管理机制:Qt 在内部能够维 ...