zoukankan      html  css  js  c++  java
  • JBPM4 经常使用表结构及其说明

            首先我想说。这不一篇原创博文。

    这里设置成原创。主要是为了分享,由于它对于jbpm的刚開始学习的人,真的值得一看。原作者的博文地址并没有查到,我是在还有一位转载此文的博主那儿获得的。地址在这儿


           本文从表结构、操作时表的变化以及jbpm4.4各个包的作用来介绍jbpm的。


    第一部分:表结构说明
    Jbpm4 共同拥有18张表。例如以下,当中红色的表为常常使用的表
     
    一:资源库与执行时表结构
    1.  JBPM4_DEPLOYMENT 流程定义表
    2.  JBPM4_DEPLOYPROP 流程定义属性表
    3.  JBPM4_EXECUTION  流程实例表
    4.  JBPM4_PROPERTY  流程引擎表
     
    5.  JBPM4_TASK 任务表
    6.  JBPM4_VARIABLE 上下文表
    7.  JBPM4_JOB  定时表
    8. JBPM4_LOB  存储表
    9.  JBPM4_SWIMLANE泳道表
    10.  JBPM4_PARTICIPATION 參与者表
     
    二: 历史数据表
    11.  JBPM4_HIST_ACTINST 流程活动(节点)实例表
    12.  JBPM4_HIST_DETAIL  流程历史具体表 
    13.  JBPM4_HIST_PROCINST 流程实例历史表
    14.  JBPM4_HIST_TASK  流程任务实例历史表
    15.  JBPM4_HIST_VAR 流程变量(上下文)历史表
     
    三:身份认证表结构
    16.  JBPM4_ID_GROUP 组表
    17.  JBPM4_ID_MEMBERSHIP 用户角色表
    18.  JBPM4_ID_USER  用户表
    这三张表非经常见。主要的权限控制,关于用户认证方面建议还是自己开发一套,组件自带的功能太简单,使用中有非常多需求难以满足
     
    第二部分:表结构描写叙述
    1.  JBPM4_DEPLOYMENT 流程定义表
    2.  JBPM4_DEPLOYPROP 流程定义属性表
    3.  JBPM4_EXECUTION  流程实例表
    主要是存放JBPM4的运行信息,Execution机制取代了JBPM3的Token机制。

    4.  JBPM4_PROPERTY  流程引擎表
     
    5.  JBPM4_TASK 任务表
    存放须要人来完毕的Activities。须要人来參与完毕的Activity 被称为Task
    6.  JBPM4_VARIABLE 上下文表 存的是进行时的暂时变量
    7.  JBPM4_JOB  定时表  存放的是Timer的定义
    8. JBPM4_LOB  存储表
    9.  JBPM4_SWIMLANE泳道表
    Swim Lane是一种Runtime Process Role。通过Swim Lane。多个Task能够一次分配到同一Actor身上。
    10.  JBPM4_PARTICIPATION 參与者表   
    存放 Participation的信息,Participation的种类有Candidate、Client、Owner、 Replaced Assignee和Viewer。而详细的Participation既能够是单一用户,也能够是用户组。
     
    二: 历史数据表
    11.  JBPM4_HIST_ACTINST 流程活动(节点)实例表 存放Activity Instance的历史记录
    12.  JBPM4_HIST_DETAIL  流程历史具体表    保存Variable的变更记录
    13.  JBPM4_HIST_PROCINST 流程实例历史表 存放Process Instance的历史信息
    14.  JBPM4_HIST_TASK  流程任务实例历史表 Task的历史信息。
    15.  JBPM4_HIST_VAR 流程变量(上下文)历史表 保存历史的变量
     
    第三部分:操作信息变化
     
    注意:下面操作步骤向表中添加记录的顺序(经过測试)
     
    公布一个流程deploy后
    Ø jbpm4_deployment(流程定义):新增一条记录
    Ø jbpm4_lob(存储表): 新增一条记录
    Ø jbpm4_deployprop(流程定义属性表):新增四条记录 
     
    上传一个zip包(包括png和jpdl.xml)后
    Ø JBPM4_DEPLOYMENT多一条记录
    Ø JBPM4_DEPLOYPROP 多三条
    Ø JBPM4_LOB多两条。
     
     
    開始一个流程startProcessInstanceByKey后
    Ø jbpm4_execution(流程实例表):新增一条记录
    Ø jbpm4_hist_procinst(流程实例历史表):新增一条记录
    Ø jbpm4_variable (上下表):新增一条记录
    Ø jbpm4_task (任务表):新增一条记录
    Ø jbpm4_hist_task(任务历史表):新增一条记录
    Ø jbpm4_hist_actinst (活动节点实例表):新增一条记录
     
     
     
    填写申请信息
    Ø jbpm4_variable(上下表) : 新增N条记录,依据表单信息决定
    Ø jbpm4_task (任务表):新增一条记录
    Ø jbpm4_hist_task(任务历史表):新增一条记录
    Ø jbpm4_hist_actinst (活动节点实例表):新增一条记录
     
    审批申请信息
    1.允许:
    Ø jbpm4_hist_actinst (活动节点实例表):新增一条记录
    2.驳回:
    Ø jbpm4_task (任务表):新增一条记录
    Ø jbpm4_hist_task(任务历史表):新增一条记录
    Ø jbpm4_hist_actinst (活动节点实例表):新增一条记录

    审批结束

    Ø jbpm4_hist_actinst (活动节点实例表):新增一条记录


    第四部分:JBMP4.4包作用
    org.jbpm.pvm.internal.ant

    提供使用ant公布流程,辅助启动jboss的任务。

    org.jbpm.pvm.internal.builder

    用来构造各种模型。包含活动,活动行为。事件,事件处理器,流程定义。变量。任务。等等。

    org.jbpm.pvm.internal.cal

    提供日历,包含日期。时间段,持续时间,节假日。

    org.jbpm.pvm.internal.cfg

    JbpmConfiguration和SpringConfiguration实现了org.jbpm.api.Configuration。用来从配置文件构造ProcessEngine

    org.jbpm.pvm.internal.xml

    主要用于解析xml的,主要解析jbpm.cfg.xml和流程定义文件

    org.jbpm.pvm.internal.util

    包括经常使用工具

    org.jbpm.pvm.internal.wire

    用来在ioc里进行依赖绑定。子包包括binding, descriptor, operation和xml,并且默认的绑定方式是使用field。而不是常见的setter绑定方式。

    org.jbpm.pvm.internal.type

    用来进行类型转换,主要是载入jbpm.cfg.xml对流程引擎进行初始化时。还有就是公布流程的时候进行类型转换。子包包含converter。matcher和variable,类型转换器,类型匹配器和变量。

    org.jbpm.pvm.internal.tx

    当中负责处理事务,JtaTransaction啦,SpringTransationInterceptor 啦,StandardTransaction啦,这些须要依据实际环境详细选择。jta的实现部分已经单独放到子包jta中了。希望spring中的事务也能这样处理就好了。

    org.jbpm.pvm.internal.test

    包下放了一个JobTestHelper,显然是能够帮助在測试环境下执行job的,。

    org.jbpm.api.client

    这部分包括ClientExecution, ClientProcessDefinition, ClientProcessInstance。ClientExecution继承了OpenExecution,声明了end(), signal(), suspend(), resume()之类的方法。

    ClientProcessDefintion继承了OpenProcessDefintion,当中的功能主要是 createProcessInstance和startProcessInstance。

    org.jbpm.pvm.internal.cmd

    包括Command和CommandService,这是命令设计模式的基础。

    当中放着全部的命令,全部的流程操作都能够在这里找到。

    org.jbpm.pvm.internal.email

    以下有两个子包impl和spi。仅仅要注意spi下的AddressResolver, MailProducer和MailSession就能够实现自己定义的实现了。

    org.jbpm.pvm.internal.env

    包括Context, Environment, EnvironmentFactory, Transaction, WireObject。当中Context, Environment和EnvironmentFactory组成了jBPM4里的IoC系统。Transaction定义了通用事务。 WireObject用来做依赖绑定。以下保存着环境有关的实现类。包括Authentication权限认证。Environment与context 相关的各个类。

    org.jbpm.pvm.internal.hibernate

    以下的类是专门与hibernate进行交互的类,包括类型转换。命名策略和最基本的DbSessionImpl。全部与数据库的操作都来源于此。

    org.jbpm.pvm.internal.history

    以下是历史操作所须要的部分。其下还包括events和model包。

    org.jbpm.pvm.internal.identity

    包主要负责身份认证的操作。包括三个子包cmd, impl和spi。cmd下定义所用到的命令,impl下是实现类。spi下放着IdentitySession。

    org.jbpm.pvm.internal.jms

    包含JmsMessageSession和JmsMessageUtil,应该是用来处理jms的,JmsMessageSession与 org.jbpm.api.job.Message相关联。

    说明job下的Message是依靠jms发送异步消息的。

    org.jbpm.pvm.internal.job

    提供了对job, message和timer的实现

    org.jbpm.pvm.internal.jobexecutor

    提供了任务运行器。包含JobExecutorServlet和相应的线程池。以及一系列的命令和处理器。不管是job, message或是timer,终于都会被这里运行。

    org.jbpm.pvm.internal.lob

    主要用来处理流程公布时的文件内容,须要把jpdl.xml文件和图片,甚至是以后可能把class文件都以附件形式保存到数据库中,以备后用

    org.jbpm.pvm.internal.model

    这个模型包中包括了非常多非常多类。包括Activity, CompositeElement, Condition, ObservableElement, OpenProcessDefinitionTransition。

    简单分类一下。最底层的是ObservableElement,它是能够被事件监听的元素,而且能够继承,CompositeElement继承了 ObservableElement,它里面能够装填多个活动。再加上Event中定义了多个事件,这些就构成了最主要的事件模型。

    Activity和 ActivityCoordinates分别定义了活动类和活动位置。以这些为基础。OpenProcessDefinition继承了 ProcessDefinition和CompositeElement。

    终于,我们另一个Condition类,它仅仅有一个evaluate方法,接受OpenExecution作为參数返回boolean值。Condition和Activity组合成了Transition。这个转移包括了起点。终点,以及条件推断。最庞大的模型部分,活动,转移,流程定义,流程实例的实现类都放在这里。

    在它的op子包中包括的是流程进行中的各项操作。

    org.jbpm.pvm.internal.query

    History, Job, ProcessDefintion, ProcessInstance这四个query类的实现,还提供了一个Page类,可是当中仅仅有firstResult和maxResults,所以没啥大用

    org.jbpm.pvm.internal.repository

    负责的是流程的公布。主要有Deployment和Repository相应的service, session和cache。这里使用的缓存,所以每次使用流程定义的时候能够利用缓存提高效率。

    org.jbpm.pvm.internal.script

    包括对脚本的支持,默认支持了JuelScriptEngine。

    org.jbpm.pvm.internal.session

    支持各种会话,DbSession, MessageSession, RepositorySession和TimerSession。

    org.jbpm.pvm.internal.spring

    仅仅有一个CommandTransactionCallback用来实现从spring中获得事务,并用其运行jbpm中定义的各种命令

    org.jbpm.pvm.internal.stream

    用于从各种途径读取资源。不管是jbpm配置文件和流程资源都要通过这些来转换成流的形式,以供给jbpm处理。

    org.jbpm.pvm.internal.svc

    当中svc也许是service的缩写。这个包中除了包含org.jbpm.api包下定义的全部service接口的实现,还包含commandService的实现和认证拦截器。

    org.jbpm.pvm.internal.task

    代表了全部与任务,任务參与者相关的信息,包含Assignable, AssignmentHandler, OpenTask, Participation, Swimlane, Task, TaskDefinition。简单划分后,主要有任务,任务定义任务处理。剩下的都是与任务分配有关了。TaskDefinition从字面上来看是指任务定义,里边仅仅有一个getName()。

    Task中保存了任务相关的一些内容,OpenTask主要用来处理历史事件。參与者部分基本分成三个部分,以Assignable和AssignmentHandler组成的自己定义分配部分。Participation參与者和swimlane泳道。临时没有发现三者之间与任务的联系


    JBPM4 经常使用表结构
    第一部分:表结构说明
    Jbpm4 共同拥有18张表。例如以下,当中红色的表为常常使用的表
     
    一:资源库与执行时表结构
    1.  JBPM4_DEPLOYMENT 流程定义表
    2.  JBPM4_DEPLOYPROP 流程定义属性表
    3.  JBPM4_EXECUTION  流程实例表
    4.  JBPM4_PROPERTY  流程引擎表
     
    5.  JBPM4_TASK 任务表
    6.  JBPM4_VARIABLE 上下文表
    7.  JBPM4_JOB  定时表
    8. JBPM4_LOB  存储表
    9.  JBPM4_SWIMLANE泳道表
    10.  JBPM4_PARTICIPATION 參与者表
     
    二: 历史数据表
    11.  JBPM4_HIST_ACTINST 流程活动(节点)实例表
    12.  JBPM4_HIST_DETAIL  流程历史具体表 
    13.  JBPM4_HIST_PROCINST 流程实例历史表
    14.  JBPM4_HIST_TASK  流程任务实例历史表
    15.  JBPM4_HIST_VAR 流程变量(上下文)历史表
     
    三:身份认证表结构
    16.  JBPM4_ID_GROUP 组表
    17.  JBPM4_ID_MEMBERSHIP 用户角色表
    18.  JBPM4_ID_USER  用户表
    这三张表非经常见,主要的权限控制,关于用户认证方面建议还是自己开发一套。组件自带的功能太简单,使用中有非常多需求难以满足
     
    第二部分:表结构描写叙述
    1.  JBPM4_DEPLOYMENT 流程定义表
    2.  JBPM4_DEPLOYPROP 流程定义属性表
    3.  JBPM4_EXECUTION  流程实例表
    主要是存放JBPM4的运行信息,Execution机制取代了JBPM3的Token机制。
    4.  JBPM4_PROPERTY  流程引擎表
     
    5.  JBPM4_TASK 任务表
    存放须要人来完毕的Activities,须要人来參与完毕的Activity 被称为Task
    6.  JBPM4_VARIABLE 上下文表 存的是进行时的暂时变量
    7.  JBPM4_JOB  定时表  存放的是Timer的定义
    8. JBPM4_LOB  存储表
    9.  JBPM4_SWIMLANE泳道表
    Swim Lane是一种Runtime Process Role。通过Swim Lane。多个Task能够一次分配到同一Actor身上。

    10.  JBPM4_PARTICIPATION 參与者表   
    存放 Participation的信息。Participation的种类有Candidate、Client、Owner、 Replaced Assignee和Viewer。而详细的Participation既能够是单一用户。也能够是用户组。
     
    二: 历史数据表
    11.  JBPM4_HIST_ACTINST 流程活动(节点)实例表 存放Activity Instance的历史记录
    12.  JBPM4_HIST_DETAIL  流程历史具体表    保存Variable的变更记录
    13.  JBPM4_HIST_PROCINST 流程实例历史表 存放Process Instance的历史信息
    14.  JBPM4_HIST_TASK  流程任务实例历史表 Task的历史信息。
    15.  JBPM4_HIST_VAR 流程变量(上下文)历史表 保存历史的变量
     
    第三部分:操作信息变化
     
    注意:下面操作步骤向表中添加记录的顺序(经过測试)
     
    公布一个流程deploy后
    Ø jbpm4_deployment(流程定义):新增一条记录
    Ø jbpm4_lob(存储表): 新增一条记录
    Ø jbpm4_deployprop(流程定义属性表):新增四条记录 
     
    上传一个zip包(包括png和jpdl.xml)后
    Ø JBPM4_DEPLOYMENT多一条记录
    Ø JBPM4_DEPLOYPROP 多三条
    Ø JBPM4_LOB多两条。
     
     
    開始一个流程startProcessInstanceByKey后
    Ø jbpm4_execution(流程实例表):新增一条记录
    Ø jbpm4_hist_procinst(流程实例历史表):新增一条记录
    Ø jbpm4_variable (上下表):新增一条记录
    Ø jbpm4_task (任务表):新增一条记录
    Ø jbpm4_hist_task(任务历史表):新增一条记录
    Ø jbpm4_hist_actinst (活动节点实例表):新增一条记录
     
     
     
    填写申请信息
    Ø jbpm4_variable(上下表) : 新增N条记录,依据表单信息决定
    Ø jbpm4_task (任务表):新增一条记录
    Ø jbpm4_hist_task(任务历史表):新增一条记录
    Ø jbpm4_hist_actinst (活动节点实例表):新增一条记录
     
    审批申请信息
    1.允许:
    Ø jbpm4_hist_actinst (活动节点实例表):新增一条记录
    2.驳回:
    Ø jbpm4_task (任务表):新增一条记录
    Ø jbpm4_hist_task(任务历史表):新增一条记录
    Ø jbpm4_hist_actinst (活动节点实例表):新增一条记录

    审批结束

    Ø jbpm4_hist_actinst (活动节点实例表):新增一条记录

    jbpm4.4最核心的包

    1.antlr.jar

    2.commons-collections.jar

    3.commons-logging.jar

    4.dom4j.jar

    5.hibernate-core.jar

    6.javassist.jar

    7.jbpm.jar

    8.jta.jar

    9.mail.jar

    10.slf4j-api.jar

    11.slf4j-jdk14.jar

    12.slf4j-log4j12.jar

    配置文件

    jbpm.execution.hbm.xml, jbpm.history.hbm.xml, jbpm.identity.hbm.xml, jbpm.repository.hbm.xml, jbpm.task.hbm.xml五个hibernate映射文件

    jbpm.default.cfg.xml     ---->   流程引擎的默认配置文件

    jbpm.identity.cfg.xml    ---->   身份验证配置文件

    jbpm.jbossremote.cfg.xml ---->   远程调用jboss实现命令模式

    jbpm.jobexecutor.cfg.xml ---->   任务运行器的配置

    jbpm.task.lifecycle.xml  ---->   任务生命周期,包含启动。暂停,继续,完毕。取消之类

    jbpm.tx.hibernate.cfg.xml---->   默认的hibernate事务配置

    jbpm.tx.jta.cfg.xml      ---->   jta的事务配置

    jbpm.variable.types.xml  ---->   配置变量类型映射

    jbpm.wire.bindings.xml   ---->   依赖绑定映射

    jbpm4.4包作用

    org.jbpm.pvm.internal.ant

    提供使用ant公布流程,辅助启动jboss的任务。

    org.jbpm.pvm.internal.builder

    用来构造各种模型,包含活动,活动行为,事件。事件处理器,流程定义,变量。任务,等等。

    org.jbpm.pvm.internal.cal

    提供日历。包含日期。时间段,持续时间,节假日。

    org.jbpm.pvm.internal.cfg

    JbpmConfiguration和SpringConfiguration实现了org.jbpm.api.Configuration,用来从配置文件构造ProcessEngine

    org.jbpm.pvm.internal.xml

    主要用于解析xml的,主要解析jbpm.cfg.xml和流程定义文件

    org.jbpm.pvm.internal.util

    包括经常使用工具

    org.jbpm.pvm.internal.wire

    用来在ioc里进行依赖绑定。子包包括binding, descriptor, operation和xml,并且默认的绑定方式是使用field。而不是常见的setter绑定方式。

    org.jbpm.pvm.internal.type

    用来进行类型转换,主要是载入jbpm.cfg.xml对流程引擎进行初始化时。还有就是公布流程的时候进行类型转换。子包包含converter,matcher和variable,类型转换器,类型匹配器和变量。

    org.jbpm.pvm.internal.tx

    当中负责处理事务,JtaTransaction啦,SpringTransationInterceptor 啦。StandardTransaction啦,这些须要依据实际环境详细选择。

    jta的实现部分已经单独放到子包jta中了。

    希望spring中的事务也能这样处理就好了。

    org.jbpm.pvm.internal.test

    包下放了一个JobTestHelper,显然是能够帮助在測试环境下执行job的,。

    org.jbpm.api.client

    这部分包括ClientExecution, ClientProcessDefinition, ClientProcessInstance。ClientExecution继承了OpenExecution,声明了end(), signal(), suspend(), resume()之类的方法。ClientProcessDefintion继承了OpenProcessDefintion,当中的功能主要是 createProcessInstance和startProcessInstance。

    org.jbpm.pvm.internal.cmd

    包括Command和CommandService。这是命令设计模式的基础。当中放着全部的命令,全部的流程操作都能够在这里找到。

    org.jbpm.pvm.internal.email

    以下有两个子包impl和spi,仅仅要注意spi下的AddressResolver, MailProducer和MailSession就能够实现自己定义的实现了。

    org.jbpm.pvm.internal.env

    包括Context, Environment, EnvironmentFactory, Transaction, WireObject。

    当中Context, Environment和EnvironmentFactory组成了jBPM4里的IoC系统。

    Transaction定义了通用事务。

    WireObject用来做依赖绑定。以下保存着环境有关的实现类。

    包括Authentication权限认证,Environment与context 相关的各个类。

    org.jbpm.pvm.internal.hibernate

    以下的类是专门与hibernate进行交互的类,包括类型转换,命名策略和最基本的DbSessionImpl,全部与数据库的操作都来源于此。

    org.jbpm.pvm.internal.history

    以下是历史操作所须要的部分。其下还包括events和model包。

    org.jbpm.pvm.internal.identity

    包主要负责身份认证的操作。包括三个子包cmd, impl和spi,cmd下定义所用到的命令,impl下是实现类,spi下放着IdentitySession。

    org.jbpm.pvm.internal.jms

    包含JmsMessageSession和JmsMessageUtil,应该是用来处理jms的。JmsMessageSession与 org.jbpm.api.job.Message相关联。

    说明job下的Message是依靠jms发送异步消息的。

    org.jbpm.pvm.internal.job

    提供了对job, message和timer的实现

    org.jbpm.pvm.internal.jobexecutor

    提供了任务运行器。包含JobExecutorServlet和相应的线程池。以及一系列的命令和处理器。不管是job, message或是timer,终于都会被这里运行。

    org.jbpm.pvm.internal.lob

    主要用来处理流程公布时的文件内容,须要把jpdl.xml文件和图片,甚至是以后可能把class文件都以附件形式保存到数据库中。以备后用

    org.jbpm.pvm.internal.model

    这个模型包中包括了非常多非常多类,包括Activity, CompositeElement, Condition, ObservableElement, OpenProcessDefinitionTransition。

    简单分类一下。

    最底层的是ObservableElement,它是能够被事件监听的元素,而且能够继承。CompositeElement继承了 ObservableElement,它里面能够装填多个活动。再加上Event中定义了多个事件,这些就构成了最主要的事件模型。Activity和 ActivityCoordinates分别定义了活动类和活动位置。以这些为基础。OpenProcessDefinition继承了 ProcessDefinition和CompositeElement。终于,我们另一个Condition类。它仅仅有一个evaluate方法。接受OpenExecution作为參数返回boolean值,Condition和Activity组合成了Transition,这个转移包括了起点,终点,以及条件推断。最庞大的模型部分,活动,转移,流程定义。流程实例的实现类都放在这里。在它的op子包中包括的是流程进行中的各项操作。

    org.jbpm.pvm.internal.query

    History, Job, ProcessDefintion, ProcessInstance这四个query类的实现,还提供了一个Page类,可是当中仅仅有firstResult和maxResults。所以没啥大用

    org.jbpm.pvm.internal.repository

    负责的是流程的公布,主要有Deployment和Repository相应的service, session和cache,这里使用的缓存,所以每次使用流程定义的时候能够利用缓存提高效率。

    org.jbpm.pvm.internal.script

    包括对脚本的支持,默认支持了JuelScriptEngine。

    org.jbpm.pvm.internal.session

    支持各种会话,DbSession, MessageSession, RepositorySession和TimerSession。

    org.jbpm.pvm.internal.spring

    仅仅有一个CommandTransactionCallback用来实现从spring中获得事务,并用其运行jbpm中定义的各种命令

    org.jbpm.pvm.internal.stream

    用于从各种途径读取资源。不管是jbpm配置文件和流程资源都要通过这些来转换成流的形式,以供给jbpm处理。

    org.jbpm.pvm.internal.svc

    当中svc也许是service的缩写。这个包中除了包含org.jbpm.api包下定义的全部service接口的实现,还包含commandService的实现和认证拦截器。

    org.jbpm.pvm.internal.task

    代表了全部与任务,任务參与者相关的信息。包含Assignable, AssignmentHandler, OpenTask, Participation, Swimlane, Task, TaskDefinition。简单划分后,主要有任务,任务定义任务处理。剩下的都是与任务分配有关了。TaskDefinition从字面上来看是指任务定义。里边仅仅有一个getName()。Task中保存了任务相关的一些内容。OpenTask主要用来处理历史事件。參与者部分基本分成三个部分。以Assignable和AssignmentHandler组成的自己定义分配部分,Participation參与者和swimlane泳道。临时没有发现三者之间与任务的联系

  • 相关阅读:
    Codeforces 1316B String Modification
    Codeforces 1305C Kuroni and Impossible Calculation
    Codeforces 1305B Kuroni and Simple Strings
    Codeforces 1321D Navigation System
    Codeforces 1321C Remove Adjacent
    Codeforces 1321B Journey Planning
    Operating systems Chapter 6
    Operating systems Chapter 5
    Abandoned country HDU
    Computer HDU
  • 原文地址:https://www.cnblogs.com/blfbuaa/p/6724201.html
Copyright © 2011-2022 走看看