```cpp
#include<iostream>
#include<cstdio>
#include<cstring>
#include<vector>
#include<algorithm>
#include<deque>
#include<queue>
typedef long long LL;
#define Cl(X) memset(X,0,sizeof(X))
#define Lowbit(X) (X&(-X))
#define INF 0x7fffffff
using namespace std;
LL Mis,Mend,Time[105],B1[105],B2[105],F1[105],F2[105],Dist[(1<<20)+5];
char Ch;
bool Vis[(1<<20)+5];
queue<LL>Emm;
inline void SPFA() {
Dist[(1<<Mis)-1]=0,Vis[(1<<Mis)-1]=true;
Emm.push((1<<Mis)-1);
while(!Emm.empty()) {
LL Temp=Emm.front();
Emm.pop();
Vis[Temp]=false;
for(LL i=1;i<=Mend;i++) {
if((Temp | B1[i])!=Temp || (Temp & B2[i])) continue;
LL X=Temp;X=X^(F1[i] & X);X|=F2[i];
if(Dist[Temp]+Time[i]<Dist[X]) {
Dist[X]=Dist[Temp]+Time[i];
if(Vis[X]) continue;
Vis[X]=true;
Emm.push(X);
}
}
}
}
int main(){
memset(Dist,0x3f,sizeof(Dist));
scanf("%lld %lld",&Mis,&Mend);
for(LL i=1;i<=Mend;i++) {
scanf("%lld",&Time[i]);
for(LL j=0;j<Mis;j++) {
cin>>Ch;B1[i]<<=1;B2[i]<<=1;
if(Ch=='+') B1[i]++; if(Ch=='-') B2[i]++;
}
for(LL j=0;j<Mis;j++) {
cin>>Ch;F2[i]<<=1;F1[i]<<=1;
if(Ch=='+') F2[i]++; if(Ch=='-') F1[i]++;
}
}//1061109567
SPFA();
if(Dist[0]==0x3f3f3f3f3f3f3f3f) printf("0\n");
else printf("%lld\n",Dist[0]);
return 0;
}
```
by JK_LOVER @ 2019-11-30 11:10:01
LL的最大值搞错了||@[DeNeRATe](/user/38171)
by JK_LOVER @ 2019-11-30 11:10:29
你是吧dis当做int处理的
by JK_LOVER @ 2019-11-30 11:11:42