10410 这题说的是给了一棵多叉树的 bfs遍历轨迹 和dfs 遍历 轨迹 在父节点向叶子节点扩展的时候优先遍历编号较小的节点。我还原出这课树特殊判定

根据bfs的顺序来建立这课树,用一个队列安排要构造的这课子树 条件是这棵树拥有孩子节点,判定这个点的下一层孩子ij(i<j)节点之间的在dfs中  的间隔节点 将这些点分配给i节点因为可以知道这些节点肯定是i的孩子节点或者孙子节点 如果这些在dfs中 间 隔 的 节 点 个 数 大 于 0 就 把 i 点 推 入 队 列 当 中 ( 因 为 i 节 点有孩子节点) 这样不断的去构造这棵树的子树,还有就是当一层当中只有一个节点的时候且这个节点的编号比孩子节点来得大的时候这样就得特判 因为像我那样就直接将他们归为一层了要进行特判的条件他们有同样的祖先且前者大于后者这样后者就一定是前者的孩子而不可能是后者的兄弟节点

#include <string.h>
#include <cstdio>
#include <iostream>
#include <vector>
#include <queue>
using namespace std;
const int maxn = ;
vector<int> map[maxn];
int dfs[maxn],bfs[maxn],n;
int locdfs[maxn],locbfs[maxn],per[maxn];
int work(int a, int b){
int num = ;
for( int i = locdfs[a]+ ; i<n; ++ i ){
if( per[dfs[i]] != per[a] || dfs[i] == b )break;
per[dfs[i]] = a;
num++;
}
return num;
}
void solve(){ queue<int>Q;
Q.push(dfs[]);
while(!Q.empty()){
int t = Q.front();
Q.pop();
int start = locdfs[t] + ;
int F = locbfs[dfs[start]];
for( int i = F ; i <n ; i++ ){
int t1 = bfs[i],t2 = bfs[i+];
if(per[t1]!=t)break;
if(t1>t2){
int num=work(t1,);
if(num>) Q.push(t1);
map[t].push_back(t1); break;
}
int num = work(t1,t2);
if(num>) Q.push(t1);
map[t].push_back(t1);
}
}
}
int main(){ while( scanf("%d",&n) == ){ for(int i = ; i <= n ; ++ i)
map[i].clear();
for(int i = ; i < n ; ++ i){
scanf("%d",&bfs[i]);
locbfs[bfs[i]] = i ;
}
bfs[n] = ;
for(int i = ; i < n ; ++ i){
scanf("%d",&dfs[i]);
locdfs[dfs[i]] = i ;
}
dfs[n] = ;
for( int i = ; i <=n ; ++ i)
per[i] = dfs[];
solve();
for( int i = ; i <= n ; ++ i){
printf("%d:",i);
for( int j = ; j <map[i].size() ; ++ j )
printf(" %d",map[i][j]);
printf("\n");
}
} return ;
}
/*
4 3 5 1 2 8 6 7 9 10
4 3 1 7 10 2 6 9 5 8
*/

10895 这题比较简单说的是给了一个矩阵然后转置后输出

#include <cstdio>
#include <string.h>
#include <iostream>
#include <queue>
using namespace std;
const int maxn=;
struct node{
int column,value;
node(int a= ,int b= ){
column = a; value = b;
}
bool operator <(const node &A)const{
return column>A.column;
}
}T[maxn];
priority_queue<node>ans[][maxn];
int main(){
int n,m;
while(scanf("%d%d",&n,&m)==){
for( int i = ; i <= n ; ++ i ) while(!ans[][i].empty())ans[][i].pop();
for( int i = ; i <= m ; ++i ) while(!ans[][i].empty())ans[][i].pop();
for( int i= ;i <= n ; i++){
int num;
scanf("%d",&num);
for( int j = ; j < num ; ++ j)
scanf("%d",&T[j].column);
for( int j = ; j< num ; ++ j)
scanf("%d",&T[j].value);
for( int j= ; j< num ; ++ j)
ans[][i].push(T[j]);
}
for( int i = ; i <=n ; ++ i ){
while(!ans[][i].empty()){
node t = ans[][i].top(); ans[][i].pop();
ans[][t.column].push(node(i,t.value));
}
}
printf("%d %d\n",m,n);
for( int i = ; i <= m ; i++ ){
int num = ans[][i].size();
for( int j = ; j< num ; j++){
T[j]=ans[][i].top(); ans[][i].pop();
}
printf("%d",num);
for( int j = ; j < num ; ++ j){
printf(" %d",T[j].column);
}
printf("\n");
if(num>){
for( int j = ; j < num- ; ++ j)
printf("%d ",T[j].value);
printf("%d",T[num-].value);
}
printf("\n");
}
} return ;
}

AOAPC I: Beginning Algorithm Contests -- Training Guide (Rujia Liu) Chapter 3. Data Structures Fundamental Data Structures的更多相关文章

  1. AOAPC I: Beginning Algorithm Contests (Rujia Liu) Volume 6. Mathematical Concepts and Methods

    uva 106 这题说的是 说计算 x^2 + y^2  =  z^2  xyz 互质 然后计算个数和 在 N内 不在 勾股数之内的数的个数 然后去找需要的 维基百科上 看到 另 n*m*2 =b   ...

  2. Root :: AOAPC I: Beginning Algorithm Contests (Rujia Liu) Volume 5. Dynamic Programming

    10192 最长公共子序列 http://uva.onlinejudge.org/index.php?option=com_onlinejudge& Itemid=8&page=sho ...

  3. Root :: AOAPC I: Beginning Algorithm Contests (Rujia Liu) Volume 7. Graph Algorithms and Implementation Techniques

    uva 10803 计算从任何一个点到图中的另一个点经历的途中必须每隔10千米 都必须有一个点然后就这样 floy 及解决了 ************************************* ...

  4. Sequential Minimal Optimization: A Fast Algorithm for Training Support Vector Machines 论文研读

    摘要 本文提出了一种用于训练支持向量机的新算法:序列最小优化算法(SMO).训练支持向量机需要解决非常大的二 次规划(QP)优化问题.SMO 将这个大的 QP 问题分解为一系列最小的 QP 问题.这些 ...

  5. [UVA] 11991 - Easy Problem from Rujia Liu? [STL应用]

    11991 - Easy Problem from Rujia Liu? Time limit: 1.000 seconds Problem E Easy Problem from Rujia Liu ...

  6. uva--11991 - Easy Problem from Rujia Liu?(sort+二分 map+vector vector)

    11991 - Easy Problem from Rujia Liu? Though Rujia Liu usually sets hard problems for contests (for e ...

  7. UVA-11991 Easy Problem from Rujia Liu?

    Problem E Easy Problem from Rujia Liu? Though Rujia Liu usually sets hard problems for contests (for ...

  8. UVa 11991:Easy Problem from Rujia Liu?(STL练习,map+vector)

    Easy Problem from Rujia Liu? Though Rujia Liu usually sets hard problems for contests (for example, ...

  9. UVA 11991 Easy Problem from Rujia Liu?(vector map)

    Easy Problem from Rujia Liu? Though Rujia Liu usually sets hard problems for contests (for example, ...

随机推荐

  1. 基于spring-cloud的微服务(1) 服务注册中心eureka

    eureka是Netflix提供的服务注册中心组建,springcloud将其做了封装,作为自己的微服务架构中的一个注册中心组建 下面的例子在IDEA中启动一个eureka的实例,然后提供一个prov ...

  2. 记录一下使用Ubuntu16.0.4配置和使用docker registry

    h1, h2, h3, h4, h5, h6, p, blockquote { margin: 5px; padding: 5; } body { font-family: "Helveti ...

  3. python WEB UI自动化在日期框中动态输入当前日期

    要在日期框中输入当前日期,如下图 代码为 本想用最简单的方法,直接用sendkeys发送当前日期,如下: current_time=time.strftime('%Y-%m-%d',time.loca ...

  4. python添加Windows环境变量

    1.cmd中添加方式 SET PATH=%PATH%;c:\Program Files (x86)\Wireshark 注:如上代码添加c:\Program Files (x86)\Wireshark ...

  5. Android开发小技巧之根据position判断ListView是否在显示

    使用ListView的时候,会有判断指定项是否正在显示的需求,其实很简单,代码如下: private boolean isShowing(int position) { int showViewCou ...

  6. TFS二次开发10——分组(Group)和成员(Member)

    TFS SDK 10 ——分组(Group)和成员(Member) 这篇来介绍怎样读取TFS服务器上的用户信息 首先TFS默认有如下分组(Group): SharePoint Web Applicat ...

  7. JavaScript 包管理工具npm 和yarn 对比

  8. POJ 1180 - Batch Scheduling - [斜率DP]

    题目链接:http://poj.org/problem?id=1180 Description There is a sequence of N jobs to be processed on one ...

  9. scrollView + tableview 上下滑动失效

    scrollView + tableview 上下滑动失效 控制器添加的  要加到子控制器,不然被销毁了 [self addChildViewController:chatVC];

  10. 洛谷 P4201 设计路线 [NOI2008] 树形dp

    正解:树形dp 解题报告: 大概是第一道NOI的题目?有点激动嘻嘻 然后先放个传送门 先大概港下这题的题意是啥qwq 大概就是给一棵树,然后可以选若干条链把链上的所有边的边权变成0,但是这些链不能有交 ...