#include<iostream>
#include<cstdio>
#include<queue>
#include<vector>
#include<cstring>
using namespace std;
//p4715
// 1.用列队逆向获得数
// struct com
// {
// int pow,num;
// };
// queue<com> q;//建立队列
// int ans;
// int main()
// {
// int n;
// cin>>n;
// n = (1<<n);
// com item;
// for(int i =1;i<=n;i++)
// {
// item.num =i;
// cin>>item.pow;
// q.push(item);//入队
// }//放入第一队伍
// com a,b;
// while(q.size())
// {
// a = q.front();q.pop();
// b = q.front();q.pop();
// if(q.size()==0)break;//最后剩下冠军和亚军
// //取出前两个
// if(a.pow>b.pow)q.push(a);
// else q.push(b);
// //晋级最大弄一个
// }
// ans = (a.pow<b.pow)?a.num:b.num;
// cout<<ans;
// }
//p4913
// 1.找到编号为x的节点
// 2.放入左右编号
// 3.遍历获得长度
// 4.链表查找复杂度高,用顺序表
// struct build
// {
// int left,right;
// };
// long long n,max_len;
// vector<build> arr;
// void find_h(int pos,int h)
// {
// if(h>max_len)max_len = h;//更新最大值
// if(arr[pos].left!=0)
// {
// find_h(arr[pos].left,h+1);
// }
// if(arr[pos].right!=0)
// {
// find_h(arr[pos].right,h+1);
// }//左右递归
// return ;
// }
// int main()
// {
// cin>>n;
// arr.resize(n+1);
// for(int i =1;i<n;i++)
// {
// cin>>arr[i].left>>arr[i].right;
// }//初始化
// find_h(1,1);
// cout<<max_len;
// }
//p1872
// 1.通过前序和中序创建数
// 2.通过数找出后序
// 3.试着用链表
// struct cow
// {
// char name;
// cow *left,*right;//左右数
// };
// string beg,ctr;
// void get_tree(cow* &pos,string a,string b)//分别表示要前中序字符串
// {
// if(a.length()==0)return ;//出口
// char ch = a[0];//获得首字母
// pos = new cow;//分配空间
// pos->left = NULL;pos->right = NULL;
// pos->name = ch;//放入数据
// string b1,b2,a1,a2;
// int k =0;
// while(b[k]!=ch)k++;
// for(int i =0;i<k;i++)b1+=b[i];
// for(int i =k+1;i<b.length();i++)b2+=b[i];//中序切割
// for(int i =1;i<=k;i++)a1+=a[i];
// for(int i =k+1;i<a.length();i++)a2+=a[i];
// get_tree(pos->left,a1,b1);
// get_tree(pos->right,a2,b2);
// }
// void print(cow *pos)
// {
// if(pos==NULL)return;
// print(pos->left);
// print(pos->right);
// cout<<pos->name;
// }
// int main()
// {
// cow *LNode = NULL;
// cin>>beg>>ctr;
// get_tree(LNode,ctr,beg);
// print(LNode);
// }
// p5076(放弃了,不会)
// int n;
// typedef struct Node
// {
// int size,value,num;
// Node *left,*right;
// }*NodeList;
// void InitNode(NodeList &L)
// {
// L = new Node;
// L->left = NULL;L->right = NULL;
// L->size = 0;
// L->value = 0;
// }
// inline void update(Node* &L)
// {
// L->size = L->left->size+L->right->size+L->num;
// }
// int my_rank(int x,Node* L)
// {
// if(x<L->value)return my_rank(x,L->left);
// if(x>L->value)return my_rank(x,L->right)+L->left->size+L->num;
// return L->left->size+L->num;
// }
// int kth(int x,Node* L)
// {
// if(x<=L->left->size)return kth(x,L->left);
// if(x<=L->left->size+L->num)return L->value;
// return kth(x-L->left->size-L->num,L->right);
// }
// void insert(int x,Node* &L)
// {
// if(x<L->value)
// {
// if(L->left==NULL)
// {
// L->left = new Node;
// L->left->left = NULL;L->left->right = NULL;
// L->left->size = 1;
// L->left->value = x;
// }
// else insert(x,L->left);
// }
// else if(x>L->value)
// {
// if(L->right==NULL)
// {
// L->right = new Node;
// L->right->left = NULL;L->right->right = NULL;
// L->right->size = 1;
// L->right->value = x;
// }
// else insert(x,L->right);
// }
// else L->num++;
// update(L);
// }
// int main()
// {
// cin>>n;
// NodeList List;
// InitNode(List);
// for(int i =0;i<n;i++)
// {
// int opt,x;
// cin>>opt>>x;
// switch (opt)
// {
// case 1:
// cout<<my_rank(x,List)<<endl;
// break;
// case 2:
// cout<<kth(x,List)<<endl;
// break;
// case 3:
// cout<<kth(my_rank(x,List)-1,List)<<endl;
// break;
// case 4:
// cout<<kth(my_rank(x+1,List),List)<<endl;
// break;
// case 5:
// insert(x,List);
// break;
// }
// }
// }
//p1364
// int n,ans = 10000000;
// int arr[110];
// struct Node
// {
// int left,right,father,value;
// }t[110];
// int cal(int x,int d)
// {
// if(x==0||arr[x]==1)return 0;
// arr[x] = 1;
// return cal(t[x].left,d+1)+cal(t[x].right,d+1)+cal(t[x].father,d+1)+t[x].value*d;
// }
// int main()
// {
// cin>>n;
// for(int i =1;i<=n;i++)cin>>t[i].value>>t[i].left>>t[i].right;
// for(int i =1;i<=n;i++)
// {
// t[t[i].left].father = i;
// t[t[i].right].father = i;
// }
// for(int i =1;i<=n;i++)
// {
// memset(arr,0,sizeof(arr));
// ans = min(ans,cal(i,0));
// }
// cout<<ans;
// }
//1229(太玄妙了)
// long long ans;
// string a,b;
// int main()
// {
// cin>>a>>b;
// for(int i =0;i<a.length()-1;i++)
// {
// for(int j =1;j<b.length();j++)
// {
// if(a[i]==b[j]&&a[i+1]==b[j-1])ans++;
// }
// }
// cout<<(1<<ans);
// }
//p1305
// int n,ans;
// struct Node
// {
// char value,left,right;
// }arr[100];
// struct NodeNum
// {
// int value,left,right;
// }t[100];
// void print(int x)
// {
// if(x==0)return;
// cout<<arr[t[x].value].value;
// print(t[x].left);
// print(t[x].right);
// }
// int main()
// {
// cin>>n;
// for(int k =1;k<=n;k++)
// {
// char value,left,right;
// cin>>value>>left>>right;
// int i =value-'a'+1;if(k==1)ans = i;
// arr[i].value = value;arr[i].left = left;arr[i].right = right;
// t[i].value = arr[i].value-'a'+1;
// if(arr[i].left=='*')t[i].left = 0;
// else t[i].left = arr[i].left-'a'+1;
// if(arr[i].right=='*')t[i].right = 0;
// else t[i].right = arr[i].right-'a'+1;
// }
// print(ans);
// }
//p1030
// void build(string a,string b)
// {
// if(a.empty())return ;
// char ch = b[b.length()-1];//获得最后字符
// int pos = a.find(ch);//找到字符位置
// b.erase(b.length()-1);
// string a_1 = a.substr(0,pos);
// string a_2 = a.substr(pos+1);
// string b_1 = b.substr(0,pos);
// string b_2 = b.substr(pos);
// cout<<ch;
// build(a_1,b_1);
// build(a_2,b_2);
// }
// string mir,last;
// int main()
// {
// cin>>mir>>last;
// build(mir,last);
// }
//p3884
// 1.建立树,包含节点数字,左右和父节点
// 第一个点不知道为什么wa了
// struct Node
// {
// int left,right,value,father;
// }arr[110];
// int t[110];
// int n,x,y;
// int deep,width,dis = 10000;
// int u,v;
// void my_deep(int pos,int len)
// {
// if(pos==0)return;
// if(len>deep)deep = len;
// my_deep(arr[pos].left,len+1);
// my_deep(arr[pos].right,len+1);
// }
// void my_width()
// {
// queue<Node> q;
// q.push(arr[1]);//特殊处理
// while (!q.empty())
// {
// int cout = q.size();
// width = max(width,cout);
// while(cout--)
// {
// Node item = q.front();q.pop();
// if(arr[item.left].value)q.push(arr[item.left]);
// if(arr[item.right].value)q.push(arr[item.right]);
// }
// }
// }
// // 深度优先
// void my_dis(int pos,int len)
// {
// if(pos==v)
// {
// dis = min(dis,len);
// return;
// }
// if(t[pos]==1||pos==0)return;
// t[pos] = 1;
// my_dis(arr[pos].left,arr[pos].left<pos?len+2:len+1);
// my_dis(arr[pos].right,arr[pos].right<pos?len+2:len+1);
// my_dis(arr[pos].father,arr[pos].father<pos?len+2:len+1);
// t[pos] = 0;
// }
// int main()
// {
// cin>>n;
// for(int i =0;i<n-1;i++)
// {
// cin>>x>>y;
// if(arr[x].left==0)arr[x].left = y;//优先填左边
// else arr[x].right = y;
// }
// for(int i =1;i<=n;i++)
// {
// arr[i].value = i;
// arr[arr[i].left].father = i;
// arr[arr[i].right].father = i;
// }
// cin>>u>>v;
// my_deep(1,1);
// my_width();
// my_dis(u,0);
// cout<<deep<<endl<<width<<endl<<dis;
// }
洛谷——《树》
最新推荐文章于 2024-05-08 13:33:12 发布