80分求助
查看原帖
80分求助
1183074
xzy_AK_IOI楼主2025/1/15 19:04
#include<bits/stdc++.h>
using namespace std;
#define int long long
#define F(i,k,n) for (int i=k;i<=n;i++)
typedef long long ll;
const int N=11;
int n,m;
int a[N*N][N];
queue<int>q;
bool p[1<<N];
int step[1<<N];
signed main(){
	cin>>n>>m;
	F(i,1,m) F(j,0,n-1) cin>>a[i][j];
	q.push((1<<n)-1);p[q.front()]=1;
	while (!q.empty()){
		int v=q.front();
		q.pop();
		F(i,1,m){
			int now=v;
			F(j,0,n-1){
				if (a[i][j]==-1){
					if ((now>>j)&1==0) now+=1<<j;
				}
				else if (a[i][j]==1){
					if ((now>>j)&1==1) now-=1<<j;
				}
			}
			if (p[now]) continue;
			p[now]=1;
			step[now]=step[v]+1;
			q.push(now);
		}
	}
	if (!p[0]) cout<<-1;
	else cout<<step[0];
	return 0;
}
2025/1/15 19:04
加载中...