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# IEqualityComparer 去重

    1.去除list里某重复字段值的数据(相当于group by) public class CorrController { //方法 public void DoGet() { List<tes ...

  2. Twig---基本使用

    三种特殊语法: {{ … }}   “说些什么”:输出一个变量值或者一个表达式的结果到模板.如:{{ item.username }}. twig也包含filters,它可以在模板渲染之前改变输出内容 ...

  3. 9.13Django ORM那些事

    2018-9-13 14:23:22 ORM那些事  参考 : https://www.cnblogs.com/liwenzhou/p/8660826.html 今天的都是ORM的查询 更详细进阶了! ...

  4. 国外很有多优秀的HTML5前端开发框架

    国外很有多优秀的HTML5前端开发框架 相信大家都耳熟能详:JQuery Mobile,Twitter Bootstrap, Schena Touch,  BackBone等等. 同样,也存在很多国内 ...

  5. iOS ViewControllers 瘦身

    https://objccn.io/issue-1-1/ https://juejin.im/user/57ddfba4128fe10064cbb93a 把 Data Source 和其他 Proto ...

  6. PyQT5-QPushButton切换按钮

    """ QPushButton:切换按钮就是QPsuhButton的一种特殊模式,他有两种状态:按下和未按下.我们在点击的时候切换两种状态,有很多场景会用到这个功能 Au ...

  7. arcgis api for JavaScript _加载三维图层(scene layer)

    arcgis api for JavaScript _加载三维图层(scene layer) arcgis api for JavaScript  4.x 版本增加对三维的支持. 关于三维图层(sce ...

  8. Jquery获取元素的位置

    $(".curr_play").position().left //元素距离父级元素左侧位置 $(".curr_play").offset().left //元 ...

  9. qt——QObject 与 QWidget 的区别

    QObject是QT中所有类的基类,QWidget是所有UI Widget类的基类,所以QObject是QWidget的基类,从QWidget继承也就表示继承了QObject的所有属性.

  10. python count()

    count() 描述 Python count() 方法用于统计字符串里某个字符出现的次数.可选参数为在字符串搜索的开始与结束位置. 语法 count()方法语法: str.count(sub, st ...