营销型网站的建设与推广辅导记录,wordpress无法发送,wordpress mysql口令,品牌开发者选择建议L2 - 047 锦标赛 思路#xff1a; 将其放入一颗满二叉树上去考虑#xff1a;从二叉树的最底层开始#xff0c;每一轮比赛#xff0c;为同一个祖先的左右两个儿子进行比较#xff0c;而你需要将败者的能力值填到左右两个儿子其中一个上面#xff0c;另一个就向上传递表示胜…L2 - 047 锦标赛 思路 将其放入一颗满二叉树上去考虑从二叉树的最底层开始每一轮比赛为同一个祖先的左右两个儿子进行比较而你需要将败者的能力值填到左右两个儿子其中一个上面另一个就向上传递表示胜利。参考单败淘汰制 可以发现如果需要对某一个结点进行赋值充分必要条件是该值大于等于其子树上所有值的最大值否则的话这个人就会在之前的比赛中就输掉。当一轮比赛中败者能力值无法赋值到两个人则代表“No solution”。 也就是说我们需要维护的是每个结点上其子树的最大值。由于是一颗二叉树所以最大值只需要取两个子树的max即可。同时由于需要输出每个人的能力所以二叉树中不仅要存最大值信息还要存胜者编号信息这样便能直接对败者进行赋值了。 #includebits/stdc.h
using namespace std;
const int N 20;
int ans[1 N];
int main(){int n , x;cin n;vectorarrayint , 2pre;for(int i 1 ; i (1 n) ; i ){pre.push_back({i , 0});}for(int i 1 ; i n ; i ){vectorarrayint,2st;
/* for(auto it : pre){cout it[0] it[1] endl;}*/for(int j 0 ; j (1 (n - i)); j ){cin x;auto tmp1 pre[j * 2] , tmp2 pre[j * 2 1];int id1 tmp1[0] , id2 tmp2[0] , cnt1 tmp1[1] , cnt2 tmp2[1];// cout id1 id2 endl;if(x cnt1){//放入左儿子ans[id1] x;st.push_back({id2 , max(x , cnt2)});}else if(x cnt2){//放入右儿子ans[id2] x;st.push_back({id1 , max(x , cnt1)});}else{cout No Solution;return 0;}}pre st;}cin x;if(x pre[0][1]){ans[pre[0][0]] x;}else{cout No Solution;return 0; }for(int i 1 ; i (1 n) ; i ){cout ans[i] ;}
}