https://www.luogu.org/problem/show?pid=P1155

题解: https://www.byvoid.com/zhs/blog/noip2008-twostack

开始读的代码来自 http://hzwer.com/5071.html

结论P: S[i],S[j]两个元素不能进入同一个栈 <=> 存在k,满足i<j<k,使得S[k]<S[i]<S[j].

二分图染色判断两个数能不能在同一个栈里,确定了每个数应该进入的栈之后直接模拟就好了。

开始我忘了把f[n+1]设成极大值,wa了无数次,mdzz。

 1 #include<iostream>
 2 #include<cstdio>
 3 #include<algorithm>
 4 #include<cstring>
 5 #include<cmath>
 6 using namespace std;
 7 const int maxn=1010;
 8 int n;
 9 int a[maxn]={},f[maxn]={};
10 struct nod{
11     int y,next;
12 }e[maxn*maxn];
13 int head[maxn]={},c[maxn]={},tot=0;
14 int s1[maxn]={},s2[maxn]={},t1=0,t2=0;
15 inline void init(int x,int y){e[++tot].y=y;e[tot].next=head[x];head[x]=tot;}
16 bool dfs(int x,int v){
17     c[x]=v;
18     for(int i=head[x];i;i=e[i].next){
19         if(!c[e[i].y]){
20             if(!dfs(e[i].y,3-v))return 0;
21         }
22         else if(c[x]==c[e[i].y]){
23             return 0;
24         }
25     }return 1;
26 }
27 int main(){
28     scanf("%d",&n);
29     for(int i=1;i<=n;i++)scanf("%d",&a[i]);
30     f[n+1]=(int)1e9;
31     f[n]=a[n];
32     for(int i=n-1;i;i--)f[i]=min(f[i+1],a[i]);
33     for(int i=1;i<=n;i++){
34         for(int j=i+1;j<=n;j++){
35             if(a[i]<a[j]&&f[j+1]<a[i]){init(i,j);init(j,i);}
36         }
37     }
38     for(int i=1;i<=n;i++){
39         if(!c[i]){
40             if(!dfs(i,1)){
41                 printf("0");
42                 return 0;
43             }
44         }
45     }
46     int now=1;
47     for(int i=1;i<=n;i++){
48         if(i!=1)printf(" ");
49         if(c[i]==1){printf("a");s1[++t1]=a[i];}
50         else {printf("c");s2[++t2]=a[i];}
51         while(s1[t1]==now||s2[t2]==now){
52             printf(" ");
53             if(s1[t1]==now){printf("b");t1--;}
54             else{printf("d");t2--;}
55             ++now;
56         }
57     }
58     return 0;
59 }

View Code

转载于:https://www.cnblogs.com/137shoebills/p/9063886.html

LOJ P1155 双栈排序 二分图染色 图论相关推荐

  1. [NOIp2008] 双栈排序 (二分图染色 + 贪心)

    题意 给你一个长为 \(n\) 的序列 \(p\) ,问是否能够通过对于两个栈进行 push, pop(print) 操作使得最后输出序列单调递增(即为 \(1 \cdots n\) ),如果无解输出 ...

  2. P1155 双栈排序(二分图的染色判断+链式前向星)

    P1155 双栈排序 让字典序最小,当然尽量进S1 那什么时候必须进S2呢? a[i]和a[j] 不能压入同一个栈⇔存在一个k,使得i<j<k且a[k]<a[i]<a[j] 因 ...

  3. P1155 双栈排序(二分图染色)

    P1155 双栈排序(二分图染色) 题目描述 Tom最近在研究一个有趣的排序问题.如图所示,通过2个栈S1和S2,Tom希望借助以下4种操作实现将输入序列升序排序. 操作a 如果输入序列不为空,将第一 ...

  4. P1155 双栈排序

    P1155 双栈排序 题目描述 Tom最近在研究一个有趣的排序问题.如图所示,通过2个栈S1和S2,Tom希望借助以下4种操作实现将输入序列升序排序. 操作a 如果输入序列不为空,将第一个元素压入栈S ...

  5. 二分图——洛谷P1155 双栈排序

    https://daniu.luogu.org/problem/show?pid=1155 二分图染色+模拟 1.首先考虑一个简单情况--单栈排序,显然有这样的一个事实: a[i]和a[j] 不能压入 ...

  6. 洛谷——P1155 双栈排序

    题目描述 Tom最近在研究一个有趣的排序问题.如图所示,通过2个栈S1和S2,Tom希望借助以下4种操作实现将输入序列升序排序. 操作a 如果输入序列不为空,将第一个元素压入栈S1 操作b 如果栈S1 ...

  7. 洛谷P1155 双栈排序

    这题什么毒瘤......之前看一直没思路,然后心说写个暴搜看能有多少分,然后就A了??! 题意:给你一个n排列,求它们能不能通过双栈来完成排序.如果能输出最小字典序方案. [update]这里面加了一 ...

  8. 虚拟化构建二分图(BZOJ2080 题解+浅谈几道双栈排序思想的题)

    虚拟化构建二分图 ------BZOJ2080 题解+浅谈几道双栈排序思想的题 本题的题解在最下面↓↓↓ 不得不说,第一次接触类似于双栈排序的这种题,是在BZOJ的五月月赛上. [BZOJ4881][ ...

  9. AC日记——双栈排序 洛谷 P1155

    双栈排序 思路: 二分图染+模拟: 代码: #include <bits/stdc++.h> using namespace std; #define maxn 1005 #define ...

最新文章

  1. mysql 5.7 marriadb_CentOS7下安装MySQL
  2. ai背景合成_智能合成AI主播很危险,应立即取消!
  3. 零基础科普:4种简单推荐算法背后的原理
  4. Java拾遗:007 - 代理模式与动态代理
  5. An impassioned circulation of affection(尺取+预处理)
  6. 一步一步写算法(之挑选最大的n个数)
  7. Microsoft.Web.RedisSessionStateProvider 运行异常问题
  8. 存储过程和存储函数和触发器示例
  9. 3.Magento的布局(Layout),块(Block)和模板(Template)
  10. Tabular学习笔记
  11. 基于多租户的云计算Overlay网络
  12. vega56刷64_Vega56显卡怎么刷Bios VEGA56显卡刷Vega64方法
  13. CMD文件的编写说明,比较详细的 1·什么是CMD文件,它有什么作用。
  14. Docker 学习新手笔记:从入门到放弃
  15. ios html5不显示图片,为什么iOS上的Safari不显示我的HTML5视频海报?
  16. 微信小程序使用towxml解析md/html
  17. 远程桌面访问计算机的步骤,如何开启远程桌面连接功能
  18. geoserver制作离线地图
  19. java——显示当前月的日历
  20. 量子计算机与人脑接口,科技是把双刃剑,“脑机接口”的利与弊,让人细思极恐...

热门文章

  1. android系统release签名
  2. Mybatis 3学习笔记(一)
  3. 前端模块管理器命令:npm bower
  4. 学习:erlang开源项目。
  5. ecshop后台实现用ajax动态修改/更新用户评论的时间
  6. 【Android】把Linux GCC安插在Android手机上
  7. ((ios开发学习笔记 十一))自定义TableViewCell 的方式实现自定义TableView(带源码)...
  8. 把时间当作朋友 随笔记
  9. 实时计字数提醒的文本框
  10. 卫星通信频段:C频段、Ku频段和Ka频段