当前位置: 首页 > news >正文

POJ 1635 Subway tree systems(树同构)

题目链接:http://poj.org/problem?id=1635

题意:给出从根节点遍历树的两种方式,判断这两种方式是否是同一棵树。

思路:树的最小表示,其实就是对于根节点的若干子树DFS后重新排序。。。。

 

#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
#define min(x,y) ((x)<(y)?(x):(y))
using namespace std;

struct node
{
    int L,R;
};

const int MAX=3005;
node a[MAX];
char s[MAX],A[MAX],B[MAX],temp[MAX];
int n,C;

int cmp(node a,node b)
{
    int len=min(a.R-a.L+1,b.R-b.L+1);
    int i;
    for(i=0;i<len;i++) if(s[a.L+i]!=s[b.L+i])
       return s[a.L+i]<s[b.L+i];
    return a.R-a.L<b.R-b.L;
}


void DFS(int L,int R,node *a)
{
    int pre=L,i,j,x=0,cnt=0;
    for(i=L;i<=R;i++)
    {
        if(s[i]=='0') x++;
        else x--;
        if(!x)
        {
            DFS(pre+1,i-1,&a[cnt]);
            a[cnt].L=pre;
            a[cnt].R=i;
            cnt++;
            pre=i+1;
        }
    }
    sort(a,a+cnt,cmp);
    x=0;
    for(i=0;i<cnt;i++) for(j=a[i].L;j<=a[i].R;j++) temp[x++]=s[j];
    x=0;
    for(i=L;i<=R;i++) s[i]=temp[x++];
}

int main()
{
    for(scanf("%d",&C);C--;)
    {
        scanf("%s",s); n=strlen(s); DFS(0,n-1,a); strcpy(A,s);
        scanf("%s",s); n=strlen(s); DFS(0,n-1,a); strcpy(B,s);
        if(strcmp(A,B)) puts("different");
        else puts("same");
    }
    return 0;
}

  

相关文章:

  • Merkle Tree算法详解
  • 数字证书
  • 400多位云计算专家和开发者,加入了同一个组织 ...
  • java字符数组char[]和字符串String之间的转换
  • .\OBJ\test1.axf: Error: L6230W: Ignoring --entry command. Cannot find argumen 'Reset_Handler'
  • js猜数字小游戏——原创
  • 戒游戏
  • STM32学习2 GPIO学习
  • 最近新上的电子商务网站
  • Cocoa Touch揭秘
  • web项目 easyui-datagrid开发实践
  • 关于计算机学科的一些期刊和会议(转)
  • NDK开发入门终极教程
  • 深入剖析Tomcat(1)
  • Linq To Sql进阶系列 -目录导航
  • 4月23日世界读书日 网络营销论坛推荐《正在爆发的营销革命》
  • C# 免费离线人脸识别 2.0 Demo
  • CSS盒模型深入
  • JavaScript的使用你知道几种?(上)
  • JavaScript设计模式与开发实践系列之策略模式
  • javascript数组去重/查找/插入/删除
  • OpenStack安装流程(juno版)- 添加网络服务(neutron)- controller节点
  • RxJS 实现摩斯密码(Morse) 【内附脑图】
  • Spring Cloud Feign的两种使用姿势
  • tweak 支持第三方库
  • 百度贴吧爬虫node+vue baidu_tieba_crawler
  • 翻译:Hystrix - How To Use
  • 构建二叉树进行数值数组的去重及优化
  • 关于for循环的简单归纳
  • 开发了一款写作软件(OSX,Windows),附带Electron开发指南
  • 如何进阶一名有竞争力的程序员?
  • 如何利用MongoDB打造TOP榜小程序
  • 深入浅出webpack学习(1)--核心概念
  • 微信小程序填坑清单
  • 写代码的正确姿势
  • 远离DoS攻击 Windows Server 2016发布DNS政策
  • 你学不懂C语言,是因为不懂编写C程序的7个步骤 ...
  • 容器镜像
  • ​人工智能之父图灵诞辰纪念日,一起来看最受读者欢迎的AI技术好书
  • # Swust 12th acm 邀请赛# [ A ] A+B problem [题解]
  • (3)选择元素——(14)接触DOM元素(Accessing DOM elements)
  • (C++17) optional的使用
  • (cos^2 X)的定积分,求积分 ∫sin^2(x) dx
  • (附源码)spring boot火车票售卖系统 毕业设计 211004
  • (每日持续更新)jdk api之FileFilter基础、应用、实战
  • (四)linux文件内容查看
  • (太强大了) - Linux 性能监控、测试、优化工具
  • (转)程序员技术练级攻略
  • (转)原始图像数据和PDF中的图像数据
  • .NET CF命令行调试器MDbg入门(四) Attaching to Processes
  • .net refrector
  • .Net的DataSet直接与SQL2005交互
  • :如何用SQL脚本保存存储过程返回的结果集
  • @ComponentScan比较
  • @configuration注解_2w字长文给你讲透了配置类为什么要添加 @Configuration注解