B. pSort
题目链接:
http://codeforces.com/problemset/problem/28/B
题意:
给一个n,原本有个1到n按顺序排列的序列,给一个序列问,在给一个数组,表示这个位置的数可以换到pi位置,问能不能实现给的那个序列的排列。如果可以输出yes相反输出no
思路:
通过画图可知同一个集合的数字一定可以相互交换位置。所以这里使用并查集就好。
代码:
#include<bits/stdc++.h>
#define LL long long using namespace std;
const int maxn=+;
struct node
{
int to,Next;
};
int Head[maxn];
node Edge[maxn*];
int cnt=;
int a[maxn],b[maxn],Fa[maxn];
void add(int u,int v)
{
Edge[++cnt].to=v;
Edge[cnt].Next=Head[u];
Head[u]=cnt;
return ;
}
int Find(int x)
{
if(x==Fa[x])
{
return x;
}
else
{
return Fa[x]=Find(Fa[x]);
}
}
int main()
{
int n;
cin>>n;
for(int i=;i<=n;i++)
{
Fa[i]=i;
}
for(int i=;i<=n;i++)
{
cin>>a[i];
}
for(int i=;i<=n;i++)
{
cin>>b[i];
}
for(int i=;i<=n;i++)
{
if(i+b[i]<=n||i-b[i]>=)
{
int root1=Find(i);
if(i+b[i]<=n)
{
int root2=Find(i+b[i]);
if(root1!=root2)
{
Fa[root2]=root1;
}
}
if(i-b[i]>=)
{
int root2=Find(i-b[i]);
if(root1!=root2)
{
Fa[root2]=root1;
}
}
}
}
int flag=;
for(int i=;i<=n;i++)
{
int root1=Find(a[i]);
int root2=Find(i);
if(root1!=root2)
{
//cout<<i<<" "<<a[i]<<endl;
flag=;
break;
}
}
if(flag)
{
cout<<"YES"<<endl;
}
else
{
cout<<"NO"<<endl;
}
return ;
}
B. pSort的更多相关文章
- CF28B pSort
题目描述 给定一个含有n个元素的数列,第i号元素开始时数值为i,元素i可以与距离为d[i]的元素进行交换.再给定一个1-n的全排列,问初始的数列可否交换成给定的样式. 输入:第一行一个整数n,第二行n ...
- c# JD快速搜索工具,2015分析JD搜索报文,模拟请求搜索数据,快速定位宝贝排行位置。
分析JD搜索报文 搜索关键字 女装 第二页,分2次加载. rt=1&stop=1&click=&psort=&page=3http://search.jd.com/Se ...
- 淘宝(阿里百川)手机客户端开发日记第四篇 自定义ListView详解
我们知道,如果采用官方的ListView,实现的功能在很多时候,并不能满足自己的业务需求,比如在设计到复杂的列表的时候,这一节,我们就开始动手自己实现自定义的ListView. 在上一节中,我们采用了 ...
- 01.base-v1.js
/* Date: 2014-01-21 */ function login() { return location.href = "https://passport.jd.com/new/l ...
- 【解题报告】zju-1030 Farmland
原题地址:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemId=30 题目大意: 平面图有一些点和一条边,要求找这样的多边形: 1.边的 ...
- [CFgym]2015-2016 ACM-ICPC Pacific Northwest Regional Contest小结
*感谢两位浙江大佬带我飞 贴下成绩 div2 div1 *div2不是我打的上个厕所就5/11了 比赛小结 A [题目大意] 有n(n<=500)个机场,两两之间距离是g[i][j],每经停一个 ...
- sorts
各种排序算法: #include <stdio.h> #include <string.h> #include <ctype.h> #include <std ...
- python爬虫系列之爬京东手机数据
python抓京东手机数据 作者:vpoet mail:vpoet_sir@163.com #coding=utf-8 import urllib2 from lxml import etree im ...
- TreeView控制消息
控制消息的作用 通过发送消息到Treeview控件, 就能够控机Treeview控件.常用的控制有: 获取被点击的节点 获取节点的文本 设置节点的文本 获取节点的父节点 获取节点的子节点 TVM_GE ...
随机推荐
- ES6 find 和 filter 的区别
ES6 find 和 filter 的区别 : 遇到个功能是要分类就想说在前端过滤,不要从查数据库的时候过滤了.然后就想说除了filter还有啥好用的 发现有个find,测试一番之后发现 const ...
- BZOJ 1937 (luogu 4412) (KM+LCA)
题面 传送门 分析 根据贪心的思想我们得到几条性质: 1.生成树上的边权减小,非树边的边权增加 2.每条边最多被修改一次 设改变量的绝对值为d 对于一条非树边\(j:(u,v)\),树上u->v ...
- 点分治题单(来自XZY)
点分治题单(来自XZY) 静态点分治 [x] 洛谷 P3806 [模板]点分治1 [x] 洛谷 P4178 Tree [x] 洛谷 P2634 [国家集训队]聪聪可可 [x] 洛谷 P4149 [IO ...
- 好用的for循环与range
for循环 # for 变量 in 可迭代对象: # pass s = "1234567890" for each in s: # 遍历字符串 print(each) # 1 2 ...
- 【转】通俗理解Java序列化与反序列化
一.序列化和反序列化的概念 把对象转换为字节序列的过程称为对象的序列化. 把字节序列恢复为对象的过程称为对象的反序列化. 对象的序列化主要有两种用途: 1) 把对象的字节序列永久地保存到硬盘上,通常存 ...
- C# WCF 服务引用与Web引用
参考:https://blog.csdn.net/yelin042/article/details/82770205
- SQL server 连接 查询
在sql server中,我们经常能用到连接,今天总结一下连接的基础知识.连接的分类: 交叉连接CROSS JOIN 内连接INNER JOIN 外连接{左外连接LEFT [OUTER] JOIN : ...
- elasticsearch 深入 —— Top Hits Aggregation
Top Hits Aggregation top_hits指标聚合器跟踪正在聚合的最相关文档. 此聚合器旨在用作子聚合器,以便可以按桶聚合最匹配的文档. top_hits聚合器可以有效地用于通过桶聚合 ...
- 【记录】使用Navicat将表设计导出数据库设计文档
INFORMATION_SCHEMA. Tables -- 表信息 INFORMATION_SCHEMA. COLUMNS -- 列信息 参考文章地址:https://blog.csdn.net/cx ...
- shell简单的菜单功能