蜜汁RE?
查看原帖
蜜汁RE?
671774
LUlululu1616楼主2022/9/25 10:37

rt,本地测试能过#1,但是评测后全部RE,求大佬帮调

#include <bits/stdc++.h>
using namespace std;
const int maxn=15;
int n,m,p,k,s;
int fx[]={0,1,-1,0},fy[]={1,0,0,-1};
vector<int> e[maxn*maxn*(1<<10)],e1[maxn*maxn*(1<<10)];
int id(int x,int y,int k)
{
	return n*m*k+(x-1)*m+y;
}
int f[maxn][maxn];
int dis[maxn*maxn*(1<<10)];
void bfs()
{
	queue<int> q;
	q.push(id(1,1,0));
	memset(dis,-1,sizeof(dis));
	dis[id(1,1,0)]=0;
	while(!q.empty())
	{
		int tmp=q.front();
	//	cout <<tmp<<endl;
		q.pop();
		for(int i=0;i<e[tmp].size();i++)
		{
			int v=e[tmp][i];
			if(dis[v]==-1)
			{
				dis[v]=dis[tmp]+1;
				q.push(v);
			}
		}
	}
}
int ys[maxn][maxn][maxn];
int connect(int x,int y)
{
	for(int i=0;i<e1[y].size();i++)
		e[x].push_back(e1[y][i]);
}
int main()
{
	cin >>n>>m>>p>>k;
	memset(f,-1,sizeof(f));
	for(int i=1;i<=k;i++)
	{
		int x1,y1,x2,y2,g;
		cin >>x1>>y1>>x2>>y2>>g;
		f[id(x1,y1,0)][id(x2,y2,0)]=g;
		f[id(x2,y2,0)][id(x1,y1,0)]=g;
	}
	for(int k=0;k<(1<<p);k++)
	{
		for(int i=1;i<=n;i++)
		{
			for(int j=1;j<=m;j++)
			{
				for(int l=0;l<4;l++)
				{
					int x=i+fx[l],y=j+fy[l];
					if(x<=0||x>n||y<=0||y>m||f[id(x,y,0)][id(i,j,0)]==0)
						continue;
					if(f[id(x,y,0)][id(i,j,0)]==-1||int(k&(1<<f[id(x,y,0)][id(i,j,0)]-1)))
					{
						e[id(x,y,k)].push_back(id(i,j,k));
						//e[id(i,j,k)].push_back(id(x,y,k));
					}
				}
			}
		}
	}
//	for(int i=0;i<e[1].size();i++)
//		cout <<e[1][i]<<endl;
//	cout <<id(2,1,0)<<endl;
	for(int i=id(1,1,0);i<=id(n,m,(1<<p)-1);i++)
		e1[i]=e[i];
	cin >>s;
	for(int i=1;i<=s;i++)
	{
		int x,y,q;
		cin >>x>>y>>q;
		ys[x][y][q]=1;
	}
	for(int i=1;i<=n;i++)
		for(int j=1;j<=m;j++)
		{
			int d=0;
			for(int k=1;k<=p;k++)
				if(ys[i][j][k])
					d=d|(1<<k-1);
			if(d)
			{
				for(int k=0;k<(1<<p);k++)
				{
					if((k&d)!=d)
						connect(id(i,j,k),id(i,j,(k|d)));
				}
			}
		//	cout <<d<<endl;
		}
//	cout<<s<<endl;
	bfs();
	int ans=0x3f3f3f3f;
	for(int i=0;i<(1<<p);i++)
	{
		if(dis[id(n,m,i)]!=-1)
			ans=min(ans,dis[id(n,m,i)]);
	}
	cout <<(ans==0x3f3f3f3f?-1:ans)<<endl;
	return 0;
 } 
2022/9/25 10:37
加载中...