#include <cstdio>
#include <algorithm>
#include <queue>
using namespace std;
inline int read() {
int res=0,f=1; char ch=getchar();
while(ch<'0'||ch>'9') {if(ch=='-') f=-1; ch=getchar();}
while(ch>='0'&&ch<='9') res=(res<<1)+(res<<3)+ch-'0',ch=getchar();
return res*f;
}
const int N=1<<21;
const int M=105;
const int inf=1e9+7;
int n,m,ecnt;
int head[N];
struct Bug {
int t;
char b[N],f[N];
}s[M];
struct Edge {
int nxt,to,dis;
}e[N*M];
inline void add(int u,int v,int w){
e[++ecnt].nxt=head[u];
e[ecnt].to=v;
e[ecnt].dis=w;
head[u]=ecnt;
}
inline int getbit(int x,int p) {return (x>>(n-p))%10;}
inline bool check(int status,int x) {
for(int i=1;i<=n;++i)
if(!((s[x].b[i]=='+'&&getbit(status,i))||(s[x].b[i]=='-'&&!getbit(status,i))||s[x].b[i]=='0'))
return false;
return true;
}
inline int f(int status,int x) {
for(int i=1;i<=n;++i)
if(s[x].f[i]=='+')
status=status+(getbit(status,i)<<(n-i));
else if(s[x].f[i]=='-')
status=status-(getbit(status,i)<<(n-i));
return status;
}
struct Node {
int u,v;
bool operator <(const Node &x) const {
return v>x.v;
}
};
bool vis[N];
int dis[N];
priority_queue <Node> Q;
inline void dij(int s) {
for(int i=0;i<(1<<n);++i)
dis[i]=inf;
dis[s]=0;
Q.push((Node){s,0});
while(!Q.empty()) {
Node t=Q.top(); Q.pop();
int u=t.u;
if(vis[u]) continue;
vis[u]=1;
for(int i=head[u];i;i=e[i].nxt) {
int v=e[i].to;
if(dis[v]>dis[u]+e[i].dis) {
dis[v]=dis[u]+e[i].dis;
if(!vis[v]) Q.push((Node){v,dis[v]});
}
}
}
}
signed main() {
n=read(); m=read();
for(int i=1;i<=m;++i) {
s[i].t=read();
for(int j=1;j<=n;++j)
s[i].b[j]=getchar();
getchar();
for(int j=1;j<=n;++j)
s[i].f[j]=getchar();
}
for(int status=0;status<(1<<n);++status)
for(int j=1;j<=m;++j)
if(check(status,j))
add(status,f(status,j),s[j].t);
dij((1<<n)-1);
if(dis[0]==inf) puts("0");
else printf("%d\n",dis[0]);
return 0;
}
编译信息
/tmp/cckOeRnP.o: in function `main':
P2761.cpp:(.text+0x1b1): relocation truncated to fit: R_X86_64_PC32 against symbol `dis' defined in .bss section in /tmp/cckOeRnP.o
P2761.cpp:(.text+0x1cc): relocation truncated to fit: R_X86_64_PC32 against symbol `dis' defined in .bss section in /tmp/cckOeRnP.o
/tmp/cckOeRnP.o: in function `__static_initialization_and_destruction_0(int, int)':
P2761.cpp:(.text+0x213): relocation truncated to fit: R_X86_64_PC32 against symbol `Q' defined in .bss section in /tmp/cckOeRnP.o
P2761.cpp:(.text+0x226): relocation truncated to fit: R_X86_64_PC32 against symbol `Q' defined in .bss section in /tmp/cckOeRnP.o
/tmp/cckOeRnP.o: in function `dij(int)':
P2761.cpp:(.text._Z3diji[_Z3diji]+0x4b): relocation truncated to fit: R_X86_64_PC32 against symbol `dis' defined in .bss section in /tmp/cckOeRnP.o
P2761.cpp:(.text._Z3diji[_Z3diji]+0x6c): relocation truncated to fit: R_X86_64_PC32 against symbol `dis' defined in .bss section in /tmp/cckOeRnP.o
P2761.cpp:(.text._Z3diji[_Z3diji]+0x8e): relocation truncated to fit: R_X86_64_PC32 against symbol `Q' defined in .bss section in /tmp/cckOeRnP.o
P2761.cpp:(.text._Z3diji[_Z3diji]+0x9a): relocation truncated to fit: R_X86_64_PC32 against symbol `Q' defined in .bss section in /tmp/cckOeRnP.o
P2761.cpp:(.text._Z3diji[_Z3diji]+0xb1): relocation truncated to fit: R_X86_64_PC32 against symbol `Q' defined in .bss section in /tmp/cckOeRnP.o
P2761.cpp:(.text._Z3diji[_Z3diji]+0xc4): relocation truncated to fit: R_X86_64_PC32 against symbol `Q' defined in .bss section in /tmp/cckOeRnP.o
P2761.cpp:(.text._Z3diji[_Z3diji]+0xdb): 从输出所省略的额外重寻址溢出
collect2: error: ld returned 1 exit status