apio也有一个用并查集统计方案数的题,但这个题是弱化版。。而且网上竟然一份题解都没有

首先两个串能完全匹配,及说明相对应的两个位置有相等关系,在填0还是1的时候就只能填一次,所以就用并查集把相等的连到一起,统计答案时只统计fu【o】==o的部分

串中的0和1单独处理,特判即可

码:

#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
#define N 10007
int fu[N],qsum[200],lena,lenb,za,zb,i,j,n,l[N],f1,f2,wza[N],wzb[N],ans[999999];
char cha[N],chb[N];
int find(int o)
{if(fu[o]!=o)fu[o]=find(fu[o]);return fu[o];
}
void c2()
{int i,jw=0;for(i=1;i<=ans[0];i++){
int     o=ans[i]*2+jw;ans[i]=o%10;jw=o/10;}while(jw)ans[++ans[0]]=jw%10,jw/=10;
}
int main()
{scanf("%d",&n);for(i=int('a');i<=int('a')+n-1;i++)scanf("%d",&l[i]),qsum[i]+=l[i-1]+qsum[i-1];
scanf("%s",cha);
scanf("%s",chb);
lena=strlen(cha);
lenb=strlen(chb);
l[int('1')]=1;l[int('0')]=1;
for(i=1;i<=10005;i++)fu[i]=i;
za=0;zb=0;
while(za<lena)
{wza[za]++;wzb[zb]++;if(cha[za]=='1'){f1=10001;}else if(cha[za]=='0'){f1=10002;}else f1=find(qsum[cha[za]]+wza[za]);if(chb[zb]=='1'){f2=10001;}else if(chb[zb]=='0'){f2=10002;}else f2=find(qsum[chb[zb]]+wzb[zb]);if(f1>10000&&f2>10000&&f1!=f2){printf("0");return 0;}if(f1!=f2){if(f1>10000)fu[f2]=f1;else fu[f1]=f2;}if(wza[za]==l[cha[za]])za++;if(wzb[zb]==l[chb[zb]])zb++;
}ans[0]=1;ans[1]=1;for(i='a';i<='a'+n-1;i++){for(j=1;j<=l[i];j++){if(find(qsum[i]+j)==qsum[i]+j)c2();}}for(i=ans[0];i>=1;i--)printf("%d",ans[i]);
}

[SDOI2006]二进制方程 并查集相关推荐

  1. [Leedcode][JAVA][第990题][等式方程的可满足性][并查集]

    [问题描述][中等] 给定一个由表示变量之间关系的字符串方程组成的数组,每个字符串方程 equations[i] 的长度为 4,并采用两种不同的形式之一:"a==b" 或 &quo ...

  2. LeetCode 990. 等式方程的可满足性(并查集)

    1. 题目 给定一个由表示变量之间关系的字符串方程组成的数组,每个字符串方程 equations[i] 的长度为 4,并采用两种不同的形式之一:"a==b" 或 "a!= ...

  3. 【HDU 6411】带劲的and和 【并查集 + 二进制拆位】

    度度熊专门研究过"动态传递闭包问题",他有一万种让大家爆蛋的方法:但此刻,他只想出一道简简单单的题--至繁,归于至简 度度熊有一张n个点m条边的无向图,第i个点的点权为viviv_ ...

  4. 经典算法题:字典树、并查集、单调栈、二分、带标记函数dp、树、全排列、字符串问题等常用算法

    0. Tips 1. 位运算 如何枚举一个二进制状态数字k的子集, 方法就是针对中的二进制为1的位开始进行减法,判断数字k的二进制子集, 像枚举(2^k-1) ~ 0一样枚举其子集: int sub ...

  5. 并查集(Union-Find)

    并查集(Union-Find) 并查集(Union-Find) 1.初始化 2.查询 3.合并 4.平衡性优化,扁平化 5.按秩合并 6.路径压缩 7.代码 常用模板 [★ 547. 省份数量](ht ...

  6. 并查集c++代码_[Leetcode 每日精选](本周主题-并查集) 547. 朋友圈

    题目难度: 中等 原题链接 今天继续来做并查集的问题, 这道题仍然比较基础, 而且也是个比较接近现实的问题了. 大家在我的公众号"每日精选算法题"中的聊天框中回复 并查集 就能看到 ...

  7. BZOJ 2303 方格染色(带权并查集)

    要使得每个2*2的矩形有奇数个红色,如果我们把红色记为1,蓝色记为0,那么我们得到了这2*2的矩形里的数字异或和为1. 对于每个方格则有a(i,j)^a(i-1,j)^a(i,j-1)^a(i-1,j ...

  8. How Many Answers Are Wrong HDU - 3038(带权并查集经典题,满满的都是注释)

    How Many Answers Are Wrong HDU - 3038  点击打开链接 题意:现在有n个数(你并不知道这n个数是什么),m次查询,每次查询给出u,v,w.表示从第u个数到第v个数的 ...

  9. POJ 并查集 题目汇总 ——czyuan原创(转)

    继续数据结构的复习,本次的专题是:并查集. 并查集,顾名思义,干的就是"并"和"查"两件事.很多与集合相关的操作都可以用并查集高效的解决. 两个操作代码:    ...

最新文章

  1. 贵州高二会考计算机考试题,20167月贵州普通高中学业水平考试会考试题
  2. Code Sign error: Provisioning profile 'xxxxxxxxxxxxxxxxxxxxxxxxx'
  3. Xamarin 2017.9.13发布更新
  4. Windows2003ServerEnterprise+Oracle11g+VMWorkstation7.1:在虚拟机下Windows系统
  5. Educational Codeforces Round 17 E. Radio stations cdq分治 + 树状数组
  6. Opserver配置Redis、SqlServer监控
  7. mybatis动态SQL语句
  8. 1801 不重复的三位数
  9. VC 位图按钮CBitmapButton的使用
  10. git rebase 变基
  11. 商业认知,新的一年开始了
  12. Silverlight 动画性能
  13. cad常青藤插件_CAD作图效率低怎么办?最全辅助插件大合集,绘图效率提升70%,限时分享...
  14. [已解决] org.hibernate.HibernateException:未配置CurrentSessionContext
  15. 华为内部发文宣布部分部门停止社招,外包可成为新常态
  16. 第二次项目冲刺(Beta阶段)--第五天
  17. Ubuntu 14.04 设置静态IP地址全攻略
  18. OPENCV Linux 显示中文 arm64
  19. 一文彻底解决 matplotlib 中的字体管理
  20. 如何在Tungsten Fabric上整合裸金属服务器(附配置验证过程)

热门文章

  1. HTML5锤子官网,美国ESTWING 一体化锻造羊角锤 非常好用的锤子
  2. php mid转id,dedecms 会员网站UID注册名转MID
  3. java实现空心四边形_Java输入数值形成对应的平行四边形,正三角形,棱形,空心棱形...
  4. opengl学习笔记 (一)
  5. 计算机图形学知识点整理(一)
  6. CSDN博客如何复制别人的文章到自己的博客(很详细,看着图片傻瓜式操作)
  7. 计算机文件自动备份到移动硬盘,如何让电脑文件自动备份到指定的邮箱里?或者备份到指定的磁盘里...
  8. Flume监控几种方式
  9. Java实现二维码生成
  10. python中search和match的区别_Python中正则表达式match()、search()函数及match()和search()的区别详解...