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

uva 548 Tree

//提交通过,0.092,不算太快,先给出代码

 

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

#define MAX 10010
#define INF 100000010
struct treenode
{
    int data,lchild,rchild,level;
};
int *start,*flag;
int min,leaf,pre,value;

int input(int *post , int *ind)
{
    int i,len;  char ch;
    i=0;
    while(1)
    {
        if(scanf("%d",&ind[i++])==EOF) return 0; 
        ch=getchar(); if(ch=='\n')  break;
    }
    i=0;
    while(1)
    {
        if(scanf("%d",&post[i++])==EOF) return 0; 
        ch=getchar(); if(ch=='\n')  break;
    }
    return len=i;
}
int find(int len , int *s2 ,int key)
{
    int i;
    for(i=0; i<len; i++)  if(s2[i]==key)  return i;
    return i;
}
void build_treenode_post_and_ind(int len , int *s1 , int *s2 , struct treenode *tree , int mark , int level)
{
    int x,y,p;
    if(len<=0)
    {
        x=flag-start;
        if(mark==1)  tree[x].lchild=-1;
        if(mark==2)  tree[x].rchild=-1;
        return ;
    }
    x=flag-start;  y=s1+len-1-start;  
tree[y].data=s1[len-1]; tree[y].level=level; level++;
    if(mark==1)            tree[x].lchild=y;
    else if(mark==2)    tree[x].rchild=y;
    p=find(len,s2,s1[len-1]);  
    flag=s1+len-1;  mark=1;
    build_treenode_post_and_ind(p,s1,s2,tree,mark,level);
    flag=s1+len-1; mark=2;
    build_treenode_post_and_ind(len-p-1,s1+p,s2+p+1,tree,mark,level);
}
void DFS(struct treenode *tree , int s , int sum)
{
    int L,R;
    if(s<0)  
    {
        if( (tree[pre].lchild==-1 && tree[pre].rchild==-1) && 
( sum<min || (sum==min && tree[pre].data<value) )  )
        { min=sum; leaf=pre; value=tree[pre].data; }
        return ;
    }
    else 
    {
        sum+=tree[s].data;  L=tree[s].lchild; R=tree[s].rchild;
        pre=s;  DFS(tree,L,sum);
        pre=s;    DFS(tree,R,sum);
    }
}
int main()
{
    int i,len,level,mark,sum; int post[MAX],ind[MAX];  struct treenode tree[MAX];
    while(1)
    {
        len=input(post , ind);    if(!len) return 0;
        start=post; flag=NULL; mark=0; level=0;
tree[0].lchild=tree[0].rchild=tree[0].level=-1; tree[0].data=0;
        build_treenode_post_and_ind(len,post ,ind ,tree,mark,level);
        min=INF; sum=0; leaf=pre=len-1; value=tree[len-1].data; i=len-1;  
        //leaf保存最后的答案中叶子结点在树结点数组中的下标,valua是记录当最短路径长度一样
//叶子结点的最小值,pre是记录前驱的下标,i是根结点下标
        DFS(tree,i,sum);  //把整个树的结点数组,根结点的下标和当前的总和传过去

        printf("%d\n",tree[leaf].data);
    }
    return 0;
}

 

 

转载于:https://www.cnblogs.com/scau20110726/archive/2012/10/05/2712634.html

相关文章:

  • 详细解释:nginx中ngx_http_rewrite_module模块配置及各个参数含义
  • 地理可视化
  • 指向类成员的指针的用处
  • 关于KB2661254安装后,导致HTTPS不能正常访问
  • oracle substr+instr按分隔符取字串
  • PHP实战(2)
  • dhcp 中继代理配置
  • Windows Server 2008 R2修改远程桌面连接数
  • 经典的静态路由的实验
  • 学习jquery mobile
  • Hadoop学习01_Single Node Setup
  • 页面处理URL参数出现中文问题
  • php+mysql留言板代码
  • rup
  • 【一天一个shell命令】好管家--查看当前登录用户-w
  • JavaScript 如何正确处理 Unicode 编码问题!
  • 【跃迁之路】【477天】刻意练习系列236(2018.05.28)
  • AHK 中 = 和 == 等比较运算符的用法
  • ES6 ...操作符
  • Go 语言编译器的 //go: 详解
  • go语言学习初探(一)
  • javascript从右向左截取指定位数字符的3种方法
  • js中forEach回调同异步问题
  • Redash本地开发环境搭建
  • Spring Cloud Feign的两种使用姿势
  • Spring声明式事务管理之一:五大属性分析
  • Spring思维导图,让Spring不再难懂(mvc篇)
  • Traffic-Sign Detection and Classification in the Wild 论文笔记
  • 程序员最讨厌的9句话,你可有补充?
  • 力扣(LeetCode)965
  • 文本多行溢出显示...之最后一行不到行尾的解决
  • 用简单代码看卷积组块发展
  • ​​快速排序(四)——挖坑法,前后指针法与非递归
  • ​第20课 在Android Native开发中加入新的C++类
  • #预处理和函数的对比以及条件编译
  • (分类)KNN算法- 参数调优
  • (附源码)ssm本科教学合格评估管理系统 毕业设计 180916
  • (九十四)函数和二维数组
  • (牛客腾讯思维编程题)编码编码分组打印下标(java 版本+ C版本)
  • (四)Linux Shell编程——输入输出重定向
  • (一)appium-desktop定位元素原理
  • (转)创业的注意事项
  • .NET CORE Aws S3 使用
  • .NET Standard 支持的 .NET Framework 和 .NET Core
  • .net 开发怎么实现前后端分离_前后端分离:分离式开发和一体式发布
  • .NET/C# 项目如何优雅地设置条件编译符号?
  • .NET企业级应用架构设计系列之应用服务器
  • ?
  • @Query中countQuery的介绍
  • @RequestBody与@ModelAttribute
  • [.NET 即时通信SignalR] 认识SignalR (一)
  • [2023年]-hadoop面试真题(一)
  • [c++] 单例模式 + cyberrt TimingWheel 单例分析
  • [CTO札记]盛大文学公司名称对联
  • [EULAR文摘] 脊柱放射学持续进展是否显著影响关节功能