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. java的多态示例

    子类是父类的类型,但父类不是子类的类型. 子类的实例可以声明为父类型,但父类的实例不能声明为子类型. class Vehicle {} public class Car extends Vehicle ...

  2. iOS - View的抖动效果

    /** * 抖动效果 * * @param view 要抖动的view */ - (void)shakeAnimationForView:(UIView *) view { CALayer *view ...

  3. Linux at 定时任务

    命令格式:at[参数][时间]  请注意系统时间是UTC 命令功能:在一个指定的时间执行一个指定任务,只能执行一次.假如该时间已过去,那么就放在第二天执行. /var/spool/mail/这里是任务 ...

  4. DISTINCT 与 GROUP BY 的比较

    看了很多文章,这两个SQL语句在不同的数据库上面的实现上可能有相同或有不同,但是应当要明确它们在功能概念上的区别,最终得出结论: GROUP BY 用来使用聚集函数获得值,比如 AVG, MAX, M ...

  5. PAT甲1077 Kuchiguse【字符串】【暴力】【Hash】【二分】

    1077 Kuchiguse (20 分) The Japanese language is notorious for its sentence ending particles. Personal ...

  6. 高并发服务器建议调小 TCP 协议的 time_wait 超时时间。

    1. [推荐]高并发服务器建议调小 TCP 协议的 time_wait 超时时间. 说明:操作系统默认 240 秒后,才会关闭处于 time_wait 状态的连接,在高并发访问下,服 务器端会因为处于 ...

  7. nginx的一些基本功能

    1.静态HTTP服务器 首先,Nginx是一个HTTP服务器,可以将服务器上的静态文件(如HTML.图片)通过HTTP协议展现给客户端. 配置:[plain] view plain copy serv ...

  8. 数字货币量化教程——使用itertools实现各种排列组合

    在量化数据处理中,经常使用itertools来完成数据的各种排列组合以寻找最优参数 一.数据准备 import itertools items = [1, 2, 3] ab = ['a', 'b'] ...

  9. GDB调试qemu源码纪录

    今天介绍下如何利用gdb调试qemu 1.首先获取qemu源码 获取地址:https://www.qemu.org/ 2.编译安装qemu 进入qemu目录 ./configure --enable- ...

  10. 对SQL SERVER数据类型理解最好的一篇文章

    字符串前加N SQL SERVER中生成的语句中,字符串前加N,N 前缀必须是大写字母,是Unicode编码的意思. 一般来说,英文字符是一个字节组成,但是国际上的字太多了,因此就用两个字节来表示字符 ...