https://ac.nowcoder.com/acm/contest/11261/F

题意:给一组入栈出栈操作,给出入栈出栈操作元素(可重复),求入栈序列,使得栈内任意时刻状态都不相同。
思路:入栈和出栈等价于树的先根遍历,则题转化为求一颗任意从根出发的树枝都不相同的树。
可以先先根遍历,深搜建树,然后广搜填充元素,元素从多往少填才能保证树枝尽可能不相同。最后按照建树顺序输出元素即可。

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int maxn=1e6+10;
string parentheses;//括号序列
int partp=0;//遍历到括号序列的位置
int book[maxn+10];//记录颜色数量
struct colorNode{int type;int num;
};//颜色结点,包括种类和数量
bool operator<(const colorNode x,const colorNode y){//优先队列重载小于号return x.num<y.num;
}
priority_queue<colorNode>colorque;
struct treeNode{vector<int>son;int color;
}tree[maxn+10];//树结点,包括儿子和颜色
int nowid=0;//当前遍历到的树结点
void dfs(int father){//子树根节点while(parentheses[partp]=='('){//如果是左括号,说明要继续往下搜索,进入子树partp++;nowid++;//结点顺次编号tree[father].son.push_back(nowid);dfs(nowid);}partp++;//右括号说明要返回上一层return;
}
bool bfs(){queue<int>que;que.push(0);while(!que.empty()){for(int i=0;i<que.size();i++){int now=que.front();que.pop();vector<colorNode>coltemp;for(int j=0;j<tree[now].son.size();j++){int Son=tree[now].son[j];que.push(Son);if(colorque.empty())return 0;colorNode col=colorque.top();colorque.pop();tree[Son].color=col.type;col.num--;if(col.num!=0){coltemp.push_back(col);}}for(int j=0;j<coltemp.size();j++){colorque.push(coltemp[j]);}}}return 1;
}
int main(){int N;cin>>N;parentheses+='(';cin>>parentheses;parentheses+=')';//补全树根for(int i=0;i<N;i++){int x;scanf("%d",&x);book[x]++;}for(int Type=0;Type<=maxn;Type++){if(book[Type]!=0)colorque.push({Type,book[Type]});}dfs(0);if(bfs()==0){printf("NO\n");return 0;}else{printf("YES\n");}for(int i=1;i<=nowid;i++){if(i!=1)printf(" ");printf("%d",tree[i].color);}return 0;
}

2021牛客多校10 F Train Wreck(搜索,优先队列)相关推荐

  1. 2021牛客多校10 - Train Wreck(贪心)

    题目链接:点击查看 题目大意:给出一个合法的括号序列,再给出 nnn 个数字,括号序列对应着入栈和出栈,问是否存在一个合法的顺序,使得 nnn 个数字按照括号序列操作后,每次入栈后,栈中的序列都是不同 ...

  2. 2021牛客多校10 - Browser Games(哈希)

    题目链接:点击查看 题目大意:给出 nnn 个字符串,对于每个 iii ,输出最少需要用多少个前缀,可以表示第 1∼i1\sim i1∼i 个字符串而不能表示第 i+1∼ni+1\sim ni+1∼n ...

  3. 2021牛客多校7 F. xay loves trees(主席树+DFS序)

    题意:有两颗n个点的树,找出最大子集,满足如下条件: 该点集在树1上为一条连续的链 该点集在树2上,两两无任何祖先关系 思路: 对于条件2: ​ 点u如果是点v的祖先,那么u的子树一定包含v,即一定包 ...

  4. 【2021牛客多校2】F-Girlfriend 计算几何

    2021牛客多校2-F F-Girlfriend 题目大意 给出四个点 A , B , C , D A, B, C, D A,B,C,D 另有两点 P 1 , P 2 P_1, P_2 P1​,P2​ ...

  5. LCS(2021牛客多校4)

    LCS(2021牛客多校4) 题意: 让你构造三个字符串s1,s2,s3,长度均为n,要求LCS(s1,s2)=a,LCS(s2,s3)=b,LCS(s1,s3)=c 题解: 先考虑三个串互相LCS为 ...

  6. 【牛客2021暑假多校10】Train Wreck(出栈顺序,建树,优先队列维护)

    F Train Wreck 题意: 给出长为2n的括号序列,()分别表示放入站台和拿出,以及n辆火车的颜色. 求构造一个放入序列,满足不存在同一时刻站台内的颜色序列相同 思路: 将栈操作视为树,要求转 ...

  7. K-Stack 2021牛客多校2

    链接:https://ac.nowcoder.com/acm/contest/11253/K 来源:牛客网 题目描述 ZYT had a magic permutation a1,a2,⋯ ,an a ...

  8. 2021牛客多校第八场补题 D-OR

    链接:https://ac.nowcoder.com/acm/contest/11259/D 来源:牛客网 题目描述 There are two sequences of length n−1n-1n ...

  9. 2021牛客多校第五场补题

    B-Boxes 链接:https://ac.nowcoder.com/acm/contest/11256/B 来源:牛客网 题目描述 There're nn_{}n​ boxes in front o ...

  10. bitset优化+滚动优化dp ----- 2021牛客多校第8场 F Robot

    题目大意: 就是给你一个大小为n∗mn*mn∗m的矩阵,里面有障碍物,每次询问给你一个机器人,以及机器人的起始位置,问你这个机器人能否从起点到终点 机器人有3种类型 只能往右走 只能往下走 可以往右走 ...

最新文章

  1. 四种Java线程池用法解析
  2. Redis3.0 配置文件说明
  3. 斯坦福2021版图机器学习课程完结,视频、PPT全放送,大神主讲
  4. mysql字符串相加函数concat()
  5. 8.MYSQL:触发器的使用[TRIGGER]
  6. 微信小程序 开发过程中遇到的坑(一)
  7. mark ubuntu 16.04 64bit + cpu only install mtcnn
  8. 记录一次在centos下使用gmp的悲伤
  9. 计算机网络(十三),Socket编程实现TCP和UDP
  10. 【优化预测】基于matlab差分进化算法优化BP神经网络预测【含Matlab源码 1315期】
  11. zec挖矿(zcash挖矿)鱼池跟蚂蚁矿池的比较到底哪个好?哪个收益高? (二)
  12. scratch中实现画笔功能
  13. TTL电平和CMOS电平的区别及其应用
  14. C++调用Object-C
  15. ecmobile php开发文档,ecmobile PHP接口说明文档之购物车(cart/create|list|detele|update)
  16. 基于SSM架构的网上书城系统
  17. 【主题词——玫瑰花】
  18. 半价了:阿里云挑起价格战 您用得满意,请点赞
  19. k均值的损失函数_常用的损失函数
  20. 阿里云服务器---修改下载源---阿里云镜像---yum--CentOS

热门文章

  1. Linux中设置网卡静态IP地址方法
  2. 坦白说html源码,坦白说查询
  3. 可行性分析与需求分析
  4. 16进制颜色代码#FF000000 (css颜色值)
  5. t检验和wilcoxon秩和检验 判断两组数据间的显著性差异
  6. Flutter 网络请求王者 Dio 应用简介
  7. android webview支持webgl,Android WebView支持WebGL
  8. 个人网站首页设计模板
  9. 最简单华为设备怎么无需Root激活XPOSED框架
  10. 包含WebRoot的Web工程在Eclipse中的搭建和配置