这道题真的卡了我好久,一直想错方向了,想用并查集判断连通,像欧拉回路那样= =也想到了拓扑排序,但一直不知道怎么建边。收集了一下dalao们的想法,终于有思路了:比如一个正方形是A+A-B+B-;那么从A+开始,有三种方式A-B+B-;如果走到A-,那么下个出口一定是A+,此时就进入另一个正方形内部了,重复执行即可,所以只需要标记一下该点是否走过即可判环;
这里看喜好建图,邻接矩阵/表均可;
tips:如果是邻接表千万别开内存池,会RE
下面上代码:

#include<bits/stdc++.h>
using namespace std;
int b[52];//判断字符是否出现过
bool valid=false;
struct edge
{int to;//代表对应边,比如这个点是A+,那么to就代表A- edge *next;
};
struct Node
{edge *first;int flag=0;//1表示正在循环,-1表示循环结束
}nodes[52];//0-25依次对应A+------Z+;26-51依次对应A- -------Z-;
void addedge(char a,char b,int u)//建立邻接表;
{int to;if(b=='+')to=a-'A'+26;elseto=a-'A';edge *e=new edge;e->to=to;e->next=nodes[u].first;nodes[u].first=e;
}
int getu(char a,char b)
{if(b=='+')return a-'A';elsereturn a-'A'+26;
}
void dfs(int u)
{if(nodes[u].flag==1){valid=true;return;}if(nodes[u].flag==-1)return;nodes[u].flag=1;edge *e=nodes[u].first;while(e){dfs(e->to);e=e->next;}nodes[u].flag=-1;//标记为1的原因是如果该点已经递归执行了所有可行的方式但仍不成环//则下一次从其他点递归可以略过该点,因为从该点走不可能存在环;
}
void init()
{valid=false;memset(nodes,0,sizeof(nodes));memset(b,0,sizeof(b));
}
int main()
{int n;while(cin>>n){init();string str;for(int i=0;i<n;i++){cin>>str;for(int j=0;j<str.size();j+=2){if(str[j]!='0'){int u=getu(str[j],str[j+1]);b[u]=1;for(int m=0;m<str.size();m+=2){if(m!=j&&str[m]!='0')addedge(str[m],str[m+1],u);}}}}for(int i=0;i<52;i++){if(b[i]){dfs(i);if(valid)break;}}if(valid)cout<<"unbounded"<<endl;elsecout<<"bounded"<<endl;}return 0;
}

紫书刷题记录 UVa1572 自组合相关推荐

  1. bzoj3032 七夕祭(蓝书刷题记录)

    引入:经典贪心问题 均分纸牌 有 N 堆纸牌,编号分别为 1,2,-, N.每堆上有若干张,但纸牌总数必为 N 的倍数.可以在任一堆上取若于张纸牌,然后移动.移牌规则为:在编号为 1 堆上取的纸牌,只 ...

  2. To the MAX(蓝书刷题记录)

    问题描述:给定一个 n*n 的矩阵,求最大子矩阵. 引发一个专题: 求最大子矩阵的方法. 方法一:最朴素的算法可以是枚举两个端点,在对其求和.复杂度O(n^6) hloj 1935护林员盖房子 方法二 ...

  3. CSP-S集训刷题记录

    $ CSP.S $ 集训刷题记录: $ By~wcwcwch $ 一.字符串专题: 1. [模板]$ manacher $ 算法 模型: 求出字符串 $ S $ 中所有回文串的位置及长度. $ sol ...

  4. LeetCode刷题记录15——21. Merge Two Sorted Lists(easy)

    LeetCode刷题记录15--21. Merge Two Sorted Lists(easy) 目录 LeetCode刷题记录15--21. Merge Two Sorted Lists(easy) ...

  5. LeetCode刷题记录1——717. 1-bit and 2-bit Characters(easy)

    LeetCode刷题记录1--717. 1-bit and 2-bit Characters(easy) LeetCode刷题记录1--717. 1-bit and 2-bit Characters( ...

  6. 攻防世界MISC进阶区刷题记录

    文章目录 攻防世界MISC进阶区刷题记录 Ditf 运用stegextract进行分离 glance-50 gif图片分离组合脚本 hit-the-core Test-flag-please-igno ...

  7. BZOJ刷题记录---提高组难度

    BZOJ刷题记录---提高组难度 总目录详见https://blog.csdn.net/mrcrack/article/details/90228694 序号 题号 算法 思想难度 实现难度 总难度 ...

  8. 算法笔记CodeUp第一至第六章刷题记录

    文章目录 <算法笔记>2.2小节--C/C++快速入门->顺序结构 1.例题1-1-1 按要求输出信息(1) 2.例题1-1-2 按要求输出信息(2) 3.例题1-2-1 求两个整数 ...

  9. 蓝桥杯官网刷题记录python

    蓝桥杯官网刷题记录python 由于很多题都会在2020.2021.2022年省赛出现,有的在前面文章里做过的这里就不会再说了 一.空间 小蓝准备用 256MB 的内存空间开一个数组,数组的每个元素都 ...

  10. Pythontip刷题记录

    pythontip 刷题记录 11.给你一个正整数列表 L, 输出L内所有数字的乘积末尾0的个数.(提示:不要直接相乘,数字很多,相乘得到的结果可能会很大). 不能直接相乘会太大了,分解质因数,去找2 ...

最新文章

  1. hbuilderX的upx单位是什么鬼?
  2. 软件测试培训需要学习什么技术
  3. 机器学习中的欠拟合与过拟合
  4. Open vSwitch 安装
  5. Spring全局异常捕捉实现HandlerExceptionResolver接口,在error-page配置捕捉异常
  6. chromebook刷机_如何将网站添加到您的Chromebook架子上
  7. 基于.NetCore3.1系列 —— 日志记录之初识Serilog
  8. Jfinal源码解析系列一
  9. eclipse 最全快捷键 分享快乐与便捷
  10. docker宿主机访问容器_Docker容器与宿主机器通过IP内外通讯
  11. Sublime Text3底部面板添加命令行(cmd)
  12. Android通过NTP服务器取得UTC标准时间
  13. OpenCV总结——convertTo函数与浮点数类型
  14. 64qam带宽计算_64QAM有效传输速率计算
  15. xlsxwriter 简单用法
  16. 根据 Excel 整理好的文件夹名称批量给文件夹重命名
  17. lio linux工具,Linux中三种SCSI target的介绍之LIO
  18. java科大讯飞语音合成,亲测
  19. mfs文件服务器,MFS分布式文件系统搭建
  20. 人脸识别之目标追踪识别

热门文章

  1. TI DSP处理器中CMD 文件的那些事儿
  2. Linux网络管理之ss命令– 显示活动套接字信息
  3. 提醒:电脑一族常感眼睛干涩可能是干眼症
  4. iOS 页面切换控制
  5. Axure RP 8 获取焦点的应用
  6. 使用python实现猴子摘香蕉问题
  7. 常用希腊字母与英文字母对照表;希腊字母中文发音
  8. php 减号,PHP编码转换减号(连接符)无法转换问题
  9. 员工绩效评估的5个目标
  10. 配置网络地址转换NAT技术实验