分析

考虑trie+2sat

每次将?=0和?=1的分别插入

插入串时将这个点的选择状态和前缀的选择状态连关系边

注意串结束时建一个新点表示当前串

最后跑2sat即可

代码

#include<bits/stdc++.h>
using namespace std;
#define a(x) x<<1
#define b(x) x<<1|1
#define pb push_back
stack<int>a;
string s[];
vector<int>v[];
int id[],siz[],n,m;
int trie[][],cnt,bel[];
int low[],dfn[],is[],T,sum;
inline bool cmp(int a,int b){return siz[a]<siz[b];}
inline void add(int x,int y){v[x].pb(y),v[y^].pb(x^);}
inline void tarjan(int x,int fa){
dfn[x]=low[x]=++T;
a.push(x);
is[x]=;
for(int i=;i<v[x].size();i++)
if(v[x][i]!=fa){
if(!dfn[v[x][i]]){
tarjan(v[x][i],x);
low[x]=min(low[x],low[v[x][i]]);
}else if(is[v[x][i]]){
low[x]=min(low[x],dfn[v[x][i]]);
}
}
if(low[x]==dfn[x]){
sum++;
while(){
int u=a.top();
a.pop();
is[u]=;
bel[u]=sum;
if(u==x)break;
}
}
return;
}
inline void ins(int i,int x){
int p=,wh,la=;
for(int j=;j<siz[i];j++){
wh=(s[i][j]-'');
if(!trie[p][wh])trie[p][wh]=++cnt;
la=p,p=trie[p][wh],add(x,a(p));
}
trie[la][wh]=++cnt;
add(x,b(cnt)),add(a(cnt),a(p));
return;
}
int main(){
int i,j,k,ok;
scanf("%d",&n);cnt=n;
for(i=;i<=n;i++){
cin>>s[i];
id[i]=i;
siz[i]=s[i].length();
}
sort(id+,id+n+,cmp);
for(int _=;_<=n;_++){
i=id[_],ok=;
for(j=;j<siz[i];j++)
if(s[i][j]=='?'){
s[i][j]='',ins(i,a(i));
s[i][j]='',ins(i,b(i));
ok=;
break;
}
if(!ok){
ins(i,a(i));
add(b(i),a(i));
}
}
for(i=;i<=(cnt<<|);i++)if(!dfn[i])tarjan(i,);
for(i=;i<=cnt;i++)
if(bel[a(i)]==bel[b(i)]){
puts("NO");
return ;
}
puts("YES");
return ;
}

最新文章

  1. SVG:linearGradient渐变在直线上失效的问题解决方案
  2. Pyqt 国际化多语言支持
  3. Power Strings 分类: POJ 串 2015-07-31 19:05 8人阅读 评论(0) 收藏
  4. NOSQL的应用,Redis/Mongo
  5. 使用公钥登录SSL
  6. [liu yanling]常用的测试工具
  7. ubuntu10.04版本下android源码的编译
  8. (转)ASP.NET里面简单的记住用户名和密码
  9. 完整的拆分nginx访问日志
  10. 如何实现select组件的选择输入过滤作用
  11. Python中的各种装饰器详解
  12. freemarker自定义标签报错(七)
  13. 深入理解Java内存(图解堆栈)
  14. XVIII Open Cup named after E.V. Pankratiev. Grand Prix of Saratov
  15. 【LOJ#10002】喷水装置
  16. DBeaver入门
  17. 装系统w7、ubuntu、centos等系统(一)
  18. Android : 修改内核源码 and 编译、打包成新的boot.img
  19. 項目当中使用的easyui的模板crud页面
  20. final发布简评

热门文章

  1. 如何将一个.NET Core类库发布到NuGet
  2. ab压测
  3. mysql使用MRG_MyISAM(MERGE)实现水平分表
  4. Auth主件的(RBAC) 六表
  5. 如何编写testbench的总结(非常实用的总结)
  6. centos7系统时间修复
  7. activity manager
  8. LockSupport详解
  9. Django【第11篇】:Django之分页升级版本(组件)
  10. Python---面向对象---修学校