LOJ P1155 双栈排序 二分图染色 图论
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 双栈排序 二分图染色 图论相关推荐
- [NOIp2008] 双栈排序 (二分图染色 + 贪心)
题意 给你一个长为 \(n\) 的序列 \(p\) ,问是否能够通过对于两个栈进行 push, pop(print) 操作使得最后输出序列单调递增(即为 \(1 \cdots n\) ),如果无解输出 ...
- P1155 双栈排序(二分图的染色判断+链式前向星)
P1155 双栈排序 让字典序最小,当然尽量进S1 那什么时候必须进S2呢? a[i]和a[j] 不能压入同一个栈⇔存在一个k,使得i<j<k且a[k]<a[i]<a[j] 因 ...
- P1155 双栈排序(二分图染色)
P1155 双栈排序(二分图染色) 题目描述 Tom最近在研究一个有趣的排序问题.如图所示,通过2个栈S1和S2,Tom希望借助以下4种操作实现将输入序列升序排序. 操作a 如果输入序列不为空,将第一 ...
- P1155 双栈排序
P1155 双栈排序 题目描述 Tom最近在研究一个有趣的排序问题.如图所示,通过2个栈S1和S2,Tom希望借助以下4种操作实现将输入序列升序排序. 操作a 如果输入序列不为空,将第一个元素压入栈S ...
- 二分图——洛谷P1155 双栈排序
https://daniu.luogu.org/problem/show?pid=1155 二分图染色+模拟 1.首先考虑一个简单情况--单栈排序,显然有这样的一个事实: a[i]和a[j] 不能压入 ...
- 洛谷——P1155 双栈排序
题目描述 Tom最近在研究一个有趣的排序问题.如图所示,通过2个栈S1和S2,Tom希望借助以下4种操作实现将输入序列升序排序. 操作a 如果输入序列不为空,将第一个元素压入栈S1 操作b 如果栈S1 ...
- 洛谷P1155 双栈排序
这题什么毒瘤......之前看一直没思路,然后心说写个暴搜看能有多少分,然后就A了??! 题意:给你一个n排列,求它们能不能通过双栈来完成排序.如果能输出最小字典序方案. [update]这里面加了一 ...
- 虚拟化构建二分图(BZOJ2080 题解+浅谈几道双栈排序思想的题)
虚拟化构建二分图 ------BZOJ2080 题解+浅谈几道双栈排序思想的题 本题的题解在最下面↓↓↓ 不得不说,第一次接触类似于双栈排序的这种题,是在BZOJ的五月月赛上. [BZOJ4881][ ...
- AC日记——双栈排序 洛谷 P1155
双栈排序 思路: 二分图染+模拟: 代码: #include <bits/stdc++.h> using namespace std; #define maxn 1005 #define ...
最新文章
- mysql 5.7 marriadb_CentOS7下安装MySQL
- ai背景合成_智能合成AI主播很危险,应立即取消!
- 零基础科普:4种简单推荐算法背后的原理
- Java拾遗:007 - 代理模式与动态代理
- An impassioned circulation of affection(尺取+预处理)
- 一步一步写算法(之挑选最大的n个数)
- Microsoft.Web.RedisSessionStateProvider 运行异常问题
- 存储过程和存储函数和触发器示例
- 3.Magento的布局(Layout),块(Block)和模板(Template)
- Tabular学习笔记
- 基于多租户的云计算Overlay网络
- vega56刷64_Vega56显卡怎么刷Bios VEGA56显卡刷Vega64方法
- CMD文件的编写说明,比较详细的 1·什么是CMD文件,它有什么作用。
- Docker 学习新手笔记:从入门到放弃
- ios html5不显示图片,为什么iOS上的Safari不显示我的HTML5视频海报?
- 微信小程序使用towxml解析md/html
- 远程桌面访问计算机的步骤,如何开启远程桌面连接功能
- geoserver制作离线地图
- java——显示当前月的日历
- 量子计算机与人脑接口,科技是把双刃剑,“脑机接口”的利与弊,让人细思极恐...