Codeforces 1025D Recovering BST
2024-08-30 15:32:54
这个题被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 ;
}
最新文章
- 【BZOJ】4245: [ONTAK2015]OR-XOR
- linux下RDP客户端及服务器
- C++ 输出调试的一些技巧
- insert table 和create table as 区别
- paper 98:图像视觉各个领域文献目录
- MVC异常日志生产者消费者模式记录(异常过滤器)
- date 笔记
- ffmpeg 按时间戳读取文件 -re
- [转载]汇编eax寄存器和AX,AH,AL之间的关系
- Hibernate 配置详解(12) 其实我也不想用这么土的名字
- 提示:ArcGIS version not specified. You must call RuntimeManager.Bind before creating any ArcGIS components.错误
- vue非父子组件间通信
- Linux学习之路 -- 简单日常使用命令
- 爬虫入门 手写一个Java爬虫
- python/零起点(一、列表)
- PHP XML SimpleXML
- AUTOSAR-关于配置文件的思考
- Oracle调优总结
- C语言 sscanf用法详解
- 第二章 微服务构建:Spring Boot
热门文章
- linux下多线程断点下载工具-axel
- windows 10的资源管理器不显示映射的网络驱动器怎么办?
- Linux忘记root密码的解决办法
- cannot bind to 127.0.0.1:5037 报错
- 团队项目-第一次Scrum 会议
- js 图片自动循环切换setInterval();
- session-cookie 和token登录验证
- [blockchain-035]eos的部署安装智能合约
- DB2设置code page(日文943)
- Codeforces Round #281 (Div. 2) B 模拟