【建图+拓扑判环】BZOJ3953: [WF2013]Self-Assembly

时间:2022-03-06 10:17:08

Description

自动化学制造(Automatic Chemical Manufacturing,简称ACM)正在对一个叫自组装(self-assembly)的过程进行实验。在这个过程中,有着天然相互吸引力的分子被混合在溶液中,任由它们聚集组合成更大的结构。但是有一个问题随之出现:有时候,分子们会把自身组合成一个无限大的结构体,以至于把容器撑爆。
 
  你需要写一个程序来判断一个给定的分子集合是否可能组合成一个无限大的结构体。为了使问题简化,你可以作以下两个假设:
  1. 问题被限制在二维平面上。
  2. 分子集合中的每个分子都被表示成一个正方形。其中正方形的四条边分别代表分子间相连接的四个表面。
 
  你将从数据中得到每种分子的描述。每种分子有四个连接标识来分别表示每条边能与另外分子的哪种边相连。连接标识有两种:
  ● 一个大写字母(A,…,Z)加上一个 ‘+’ 号或一个 ‘-’ 号。两条边能并在一起当且仅当两者的字母相等且符号相反。比方说,‘A+’ 与 ‘A-’ 兼容,但与 ‘A+’ 或 ‘B-’ 不兼容
  ● 两个零 ‘00’。这条边将不和任意一条边兼容(包括‘00’)。
 
  假设每种分子都有无限个,并且每个分子都可以旋转和翻转。当分子将自身组成一个结构体时,相互贴合的边必须能够相互兼容,当然,无论边的连接标识是什么,它都可以不与另外边贴合。
 
  图 1 是一个由三种分子组成的一个有限的结构体(它们也有可能组成另外的有限结构体)。
 

Solution

这道题关键是要想到怎么建图

把元素看做点

正方形是使这些点联系的媒介也就是边

a和b是一个正方形上两个元素

那么a可以通过b到op(b)

就这么建图,对于无穷大这种设问,显然是问有无环

对于有向图,拓扑排序即可

存在环就可以理解为它们总是可以通过旋转翻折拼在一起(想想只往下或右拼)

大概比较神奇

紫书例题

Code

 #include<cstdio>
#include<algorithm>
using namespace std;
const int maxn=; int r[maxn],del[maxn],G[maxn][maxn];
char s[];
int n,a[]; int idx(int p){
if(s[p*]=='') return -;
int ret=s[p*]-'A';
ret*=;
if(s[p*+]=='-') ret++;
return ret;
} int topu(){
for(int t=;t<;t++){
int flag=;
for(int i=;i<;i++)
if(!del[i]&&!r[i]){
del[i]=;
for(int j=;j<;j++)
if(G[i][j]) r[j]--;
flag=;
break;
}
if(!flag) return ;
}
return ;
} int main(){
scanf("%d",&n);
for(int i=;i<=n;i++){
scanf("%s",s);
for(int j=;j<;j++)
a[j]=idx(j); for(int j=;j<;j++)
for(int k=j+;k<;k++)
if(a[j]!=-&&a[k]!=-&&j!=k){
if(!G[a[j]][a[k]^]) r[a[k]^]++;//一开始少了if以至于入度比实际的大
G[a[j]][a[k]^]=;
if(!G[a[k]][a[j]^]) r[a[j]^]++;
G[a[k]][a[j]^]=;
}
} if(topu()) printf("bounded");
else printf("unbounded");
return ;
}

【建图+拓扑判环】BZOJ3953: [WF2013]Self-Assembly的更多相关文章

  1. E&period; Andrew and Taxi(二分&plus;拓扑判环)

    题目链接:http://codeforces.com/contest/1100/problem/E 题目大意:给你n和m,n代表有n个城市,m代表有m条边,然后m行输入三个数,起点,终点,花费.,每一 ...

  2. HDU4857——逃生&lpar;反向建图&plus;拓扑排序&rpar;&lpar;BestCoder Round &num;1&rpar;

    逃生 Description 糟糕的事情发生啦,现在大家都忙着逃命.但是逃命的通道很窄,大家只能排成一行. 现在有n个人,从1标号到n.同时有一些奇怪的约束条件,每个都形如:a必须在b之前.同时,社会 ...

  3. POJ3687——Labeling Balls&lpar;反向建图&plus;拓扑排序&rpar;

    Labeling Balls DescriptionWindy has N balls of distinct weights from 1 unit to N units. Now he tries ...

  4. BZOJ&lowbar;4383&lowbar;&lbrack;POI2015&rsqb;Pustynia&lowbar;线段树优化建图&plus;拓扑排序

    BZOJ_4383_[POI2015]Pustynia_线段树优化建图+拓扑排序 Description 给定一个长度为n的正整数序列a,每个数都在1到10^9范围内,告诉你其中s个数,并给出m条信息 ...

  5. HUD2647 Reward&lowbar;反向建图拓扑排序

    HDU2647 Reward 题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2647 题意:老板要发奖金了,有n个人,给你m对数,类似a b,这样的一对 ...

  6. 牛客多校第四场 J&period;Hash Function(线段树优化建图&plus;拓扑排序)

    题目传送门:https://www.nowcoder.com/acm/contest/142/J 题意:给一个hash table,求出字典序最小的插入序列,或者判断不合法. 分析: eg.对于序列{ ...

  7. 逃生 HDU 4857(反向建图 &plus; 拓扑排序)

    逃生 链接 Problem Description 糟糕的事情发生啦,现在大家都忙着逃命.但是逃命的通道很窄,大家只能排成一行. 现在有n个人,从1标号到n.同时有一些奇怪的约束条件,每个都形如:a必 ...

  8. poj 3683 2-sat建图&plus;拓扑排序输出结果

    发现建图的方法各有不同,前面一题连边和这一题连边建图的点就不同,感觉这题的建图方案更好. 题意:给出每个婚礼的2个主持时间,每个婚礼的可能能会冲突,输出方案. 思路:n个婚礼,2*n个点,每组点是对称 ...

  9. &lbrack;十二省联考2019&rsqb;字符串问题——后缀自动机&plus;parent树优化建图&plus;拓扑序DP&plus;倍增

    题目链接: [十二省联考2019]字符串问题 首先考虑最暴力的做法就是对于每个$B$串存一下它是哪些$A$串的前缀,然后按每组支配关系连边,做一遍拓扑序DP即可. 但即使忽略判断前缀的时间,光是连边的 ...

随机推荐

  1. Docker - Install docker on CentOS

    1. 准备 由于 Dokcer 需要 64bit OS, 版本号 3.10 或者更新的版本.所以,需要我们先确认我们的 CentOS 系统 $ uname -r output :: 3.10.0-22 ...

  2. 创建Chrome启动器

    今天清理垃圾时不知怎么把chrome启动器删除了,现在要重新创建一个 1.在桌面创建一个chrome.exe的快捷键方式,属性更改目标为: "C:\Program Files (x86)\G ...

  3. &period;NET Actor Model Implementations Differ in Approach

    Last week Vaughn Vernon, author of Implementing Domain-Driven Design, published Dotsero, a .NET Acto ...

  4. LINQ to SQL语句非常详细(原文来自于网络)

    LINQ to SQL语句(1)之Where Where操作 适用场景:实现过滤,查询等功能. 说明:与SQL命令中的Where作用相似,都是起到范围限定也就是过滤作用的,而判断条件就是它后面所接的子 ...

  5. POJ 1470 Closest Common Ancestors (最近公共祖先LCA 的离线算法Tarjan)

    Tarjan算法的详细介绍,请戳: http://www.cnblogs.com/chenxiwenruo/p/3529533.html #include <iostream> #incl ...

  6. 本来运行的好的Ajax&period;dll怎么突然不起作用了

    客户中有个好多年前老项目用了Ajax.dll,前几天突然不起作用了. 问了下原因,系统从Windows Server2003 升级为 Windows Server 2008了,IIS也从6升级成7了. ...

  7. bootstrap-validator使用

    bootstrap-validator是一款与bootstrap相结合的表单前端验证模块,官方网址:http://1000hz.github.io/bootstrap-validator/ 下面内容大 ...

  8. C51应用 Modbs Rtu协议实现与KEPServerEx 通信

    最近一客户要求使用STC12C5A60S2实现Modbus Rtu协议与KEPServerEx V4.0软件通信,采集单片机P2口每位的状态,设置P0口每位的状态,实现三路AD转换其中一路采集的是C0 ...

  9. 尚硅谷springboot学习28-Docker简介

    Docker是一个开源的应用容器引擎:是一个轻量级容器技术: Docker支持将软件编译成一个镜像:然后在镜像中各种软件做好配置,将镜像发布出去,其他使用者可以直接使用这个镜像: 运行中的这个镜像称为 ...

  10. First Knight UVALive - 4297(优化高斯消元解概率dp)

    题意: 一个矩形区域被分成 m*n 个单元编号为 (1, 1)至 (m, n),左上为 (1, 1),右下为(m, n).给出P(k)i,j,其中 1 ≤ i ≤ m,1 ≤ j ≤ n,1 ≤ k ...