这个题被wa成傻逼了。。。。

ma[i][j]表示i,j能不能形成一条直接作为排序二叉树的边,n^3更新维护ma即可,按说应该是要爆复杂度的,数据玄学吧。。

#include<iostream>
#include<cstdio>
#include<cmath>
#include<queue>
#include<vector>
#include<string.h>
#include<cstring>
#include<algorithm>
#include<set>
#include<map>
#include<fstream>
#include<cstdlib>
#include<ctime>
#include<list>
#include<climits>
#include<bitset>
using namespace std;
#define fio ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);
#define fopen freopen("ouput.txt", "r", stdin);freopen("output.txt", "w", stdout);
#define left asfdasdasdfasdfsdfasfsdfasfdas1
#define tan asfdasdasdfasdfasfdfasfsdfasfdas
typedef long long ll;
typedef unsigned int un;
const int desll[][]={{,},{,-},{,},{-,}};
const ll mod=1e9+;
const int maxn=7e2+;
const int maxm=1e6+;
const double eps=1e-;
int m,n;
int ar[maxn];
char ch[maxn];
int gcd(int a,int b)
{
return b==?a:gcd(b,a%b);
}
bool gcdl[maxn][maxn];
bool ma[maxn][maxn],vis[maxn];
set<int> ve[maxn];
void init(){
memset(gcdl,,sizeof(gcdl));
for(int i=;i<=n;i++){
for(int j=i;j<=n;j++){
if(gcd(ar[i],ar[j])>)gcdl[i][j]=gcdl[j][i]=;
}
}
memset(ma,,sizeof(ma));
}
void dfs(int u)
{
vis[u]=;
for(int i=;i<=n;i++){
if(i==u || ma[u][i]==)continue;
if(vis[i]==)dfs(i);
}
}
int main()
{
scanf("%d",&n);
for(int i=;i<=n;i++){
scanf("%d",&ar[i]);
}
init();
for(int i=;i<=n;i++){
if(i>){
if(gcdl[i][i-])ma[i][i-]=;
}
if(i<n){
if(gcdl[i][i+])ma[i][i+]=;
}
}
for(int j=;j<=n;j++){
for(int i=;i<=n;i++){
if(i+j<=n && ma[i][i+j]==){
if(gcdl[i][i+j] && ma[i+j][i+]){
ma[i][i+j]=;
}
if(ma[i][i+j]==){
for(int k=i+;k<i+j;k++){
if(ma[i][k] && ma[k][i+j]){
ma[i][i+j]=;
break;
}
}
}
}
if(i-j>= && ma[i][i-j]==){
if(gcdl[i][i-j] && ma[i-j][i-]){
ma[i][i-j]=;
}
if(ma[i][i-j]==){
for(int k=i-;k>i-j;k--){
if(ma[i][k] && ma[k][i-j]){
ma[i][i-j]=;
break;
}
}
}
}
}
}
bool fond=false;
for(int i=;i<n;i++){
if(ma[i][] && ma[i][n]){
fond=true;break;
}
}
if(ma[][n] || ma[n][])fond=true; if(fond)printf("Yes\n");
else printf("No\n");
return ;
}

Codeforces 1025D Recovering BST的更多相关文章

  1. CodeForces - 1025D: Recovering BST (区间DP)

    Dima the hamster enjoys nibbling different things: cages, sticks, bad problemsetters and even trees! ...

  2. 【非原创】codeforces 1025D - Recovering BST【区间dp+二叉搜索树】

    题目:戳这里 题意:给一个不下降序列,有n个数.问能否构造一个二叉搜索树,满足父亲和儿子之间的gcd>1. 解题思路:其实这题就是构造个二叉搜索树,只不过多了个条件.主要得了解二叉搜索树的性质, ...

  3. Codeforces 1025 D - Recovering BST

    D - Recovering BST 思路:区间dp dp[l][r][0]表示l到r之间的数字可以构成一个二叉搜索树,并且以r+1为根节点 dp[l][r][0]表示l到r之间的数字可以构成一个二叉 ...

  4. CF 1025 D. Recovering BST

    D. Recovering BST http://codeforces.com/contest/1025/problem/D 题意: 给出一个连续上升的序列a,两个点之间有边满足gcd(ai ,aj) ...

  5. Recovering BST CodeForces - 1025D (区间dp, gcd)

    大意: 给定$n$个数, 任意两个$gcd>1$的数间可以连边, 求是否能构造一棵BST. 数据范围比较大, 刚开始写的$O(n^3\omega(1e9))$竟然T了..优化到$O(n^3)$才 ...

  6. D. Recovering BST Codeforces Round #505 (rated, Div. 1 + Div. 2, based on VK Cup 2018 Final)

    http://codeforces.com/contest/1025/problem/D 树 dp 优化 f[x][y][0]=f[x][z][1] & f[z+1][y][0] ( gcd( ...

  7. Codeforces Round #505 D. Recovering BST(区间DP)

    首先膜一发网上的题解.大佬们tql. 给你n个单调递增的数字,问是否能够把这些数字重新构成一棵二叉搜索树(BST),且所有的父亲结点和叶子结点之间的gcd > 1? 这个题场上是想暴力试试的.结 ...

  8. Codeforces #505(div1+div2) D Recovering BST

    题意:给你一个升序的数组,元素之间如果gcd不为1可以建边,让你判断是否可以建成一颗二叉搜索树. 解法:dp,首先建图,然后进行状态转移.因为如果点k左端与i相连,右端与k相连,则i和k可以相连,同时 ...

  9. Solution -「CF 1025D」Recovering BST

    \(\mathcal{Description}\)   Link.   给定序列 \(\{a_n\}\),问是否存在一棵二叉搜索树,使得其中序遍历为 \(\{a_n\}\),且相邻接的两点不互素.   ...

随机推荐

  1. ASP.NET Core [1]:Hosting(笔记)

    参考:http://www.cnblogs.com/RainingNight/p/hosting-in-asp-net-core.html

  2. 利用jsoup抓取网页图片

    jsoup简介 jsoup is a Java library for working with real-world HTML. It provides a very convenient API ...

  3. oracle 隔离级别、事务怎么开始的以及如何查看数据库采用字符集

    把一下语句全部粘贴至控制台运行后可以查看oracle 隔离级别 declare trans_id ); begin trans_id := dbms_transaction.local_transac ...

  4. 根文件系统制作、NFS配置与安装及利用NFS挂载根文件系统

    最近打算从头开始制作根文件系统,下面是开发过程. 一.根文件系统的制作 0.FHS(Filesystem Hierarchy Standard)标准介绍 该标准规定了根目录下各个子目录的名称及其存放的 ...

  5. 【bzoj3781】小B的询问 莫队算法

    原文地址:http://www.cnblogs.com/GXZlegend/p/6803821.html 题目描述 小B有一个序列,包含N个1~K之间的整数.他一共有M个询问,每个询问给定一个区间[L ...

  6. thr [树链剖分+dp]

    题面 思路 首先,可以有一个$dp$的思路 不难发现本题中,三个点如果互相距离相同,那么一定有一个"中心点"到三个点的距离都相同 那么我们可以把本题转化计算以每个点为根的情况下,从 ...

  7. The UVALIVE 7716 二维区间第k小

    The UVALIVE 7716 二维区间第k小 /** 题意:给一个n * n的矩阵,有q个查询 每次查询r,c,s,k表示已(r,c)为右上角 大小为s的正方形中 第k小的元素 n <= 2 ...

  8. 基于node的cmd迷你天气查询工具

    1.前几天网上看到的,于是自己小改了一下,更换了天气查询的接口,当作练习一下node. 2.收获挺大的,捣鼓了一天,终于学会了发布npm包. 3.接下来,就介绍一下这个 mini-tianqi 的主要 ...

  9. js限定内容的溢出滚动(offset,style.left)

    1. .html: <div class="test" style="position: relative;"> <ul id="c ...

  10. 笔记软件:三强篇EverNote、Mybase、Surfulater

    通过上一篇<寻找最好的笔记软件:海选篇>的综合分析,作者发现有3种软件具有较明显的优势,可谓“笔记软件三强”.它们是:EverNote.Mybase 和 Surfulater.此三者相同之 ...