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. C# 批量上传

    完整例子下载 效果: 前台: <%@ Page Language="C#" AutoEventWireup="true" CodeFile="d ...

  2. 【BZOJ3328】PYXFIB 数论+矩阵乘法

    [BZOJ3328]PYXFIB Description Input 第一行一个正整数,表示数据组数据 ,接下来T行每行三个正整数N,K,P Output T行,每行输出一个整数,表示结果 Sampl ...

  3. 使用Properties配置文件 InputStream与FileReader (java)

    java 开发中,常常通过流读取的方式获取 配置文件数据,我们习惯使用properties文件,使用此文件需要注意 文件位置:任意,建议src下 文件名称:任意,扩展名为properties 文件内容 ...

  4. 2.0CNN

    介绍 https://www.youtube.com/watch?v=jajksuQW4mc https://www.youtube.com/watch?v=2-Ol7ZB0MmU https://w ...

  5. 2018牛客网暑期ACM多校训练营(第一场) D - Two Graphs - [无向图同构]

    题目链接:https://www.nowcoder.com/acm/contest/139/D 题目描述 Two undirected simple graphs  and  where  are i ...

  6. 启动yarn

    $cd /app/hadoop/hadoop-2.2.0/sbin $./start-yarn.sh

  7. IO流(4)重命名

    重命名功能:public boolean renameTo(File dest) * 如果路径名相同,就是改名. * 如果路径名不同,就是改名并剪切. * * 路径以盘符开始:绝对路径 c:\\a.t ...

  8. 【Pyton】【小甲鱼】爬虫

    一.什么是爬虫? 可以理解为一只蜘蛛,在不同的网页上爬来爬去,获取我们需要的资源 二.Python如何访问互联网 urllib(一个包)=url(网页地址)+lib() 第一部分:protocol:/ ...

  9. python 面向对象 析构方法

    实例化但从来没有调用他,就浪费了,就应该自动删除它 这个实例一直存在内存里 python有个垃圾自动回收机制 , 每段时间会自动刷新整个内存,把内存垃圾东西删除   析构函数: 在实例释放.销毁的时候 ...

  10. python 面向对象 issubclass

    判断是否 他的父类 class Foo(object): pass obj = Foo() class Boo(Foo): pass class Coo(Boo): pass obj = Boo() ...