蒟蒻wa了求助
查看原帖
蒟蒻wa了求助
130387
_Anchor楼主2020/5/9 22:25

rt,用的双端队列,但是是前向星存的图

估计有几个点TLE是因为建图效率较低

查了半天不明白到底为啥会出错

我的程序:

#include<bits/stdc++.h>
using namespace std;
#define ll long long
#define ull unsigned long long
inline int inc(int x,int v,int mod){x+=v;return x>=mod?x-mod:x;}
inline int dec(int x,int v,int mod){x-=v;return x<0?x+mod:x;}
inline int read(){int x=0,f=1;char ch=getchar();while(ch>'9'||ch<'0'){if(ch=='-')f=-1;ch=getchar();}while(ch>='0'&&ch<='9'){x=x*10+ch-'0';ch=getchar();}return x*f;}
inline void write(int x){if(x==0){putchar(48);return;}int len=0,dg[20];while(x>0){dg[++len]=x%10;x/=10;}for(register int i=len;i>=1;i--)putchar(dg[i]+48);}
int n,m;
struct node{
    int to,next,val;
}edge[5000005];
int head[5000005],idx=0,dist[5000005];
deque<int> q;
string ch="\\";
char qwq;
void add(int u,int v,int w){
    edge[++idx].to=v;
    edge[idx].next=head[u];
    edge[idx].val=w;
    head[u]=idx;
    return ;
}
void bfs(){
	dist[1]=0;
	q.push_front(1);
	while(!q.empty()){
		int x=q.front();
		q.pop_front();
		for(int i=head[x];i!=-1;i=edge[i].next){
			int y=edge[i].to,dis=edge[i].val;
			if(dist[y]>dist[x]+dis){
				dist[y]=dist[x]+dis;
				if(!dis)q.push_front(y);
				else q.push_back(y);
			}
		}
	}
	return ;
}
int main(){
	memset(head,-1,sizeof(head));
	memset(dist,0x3f,sizeof(dist));
	n=read(),m=read();
	for(int i=1;i<=n;i++){
		for(int j=1;j<=m;j++){
			cin>>qwq;
			if(qwq==ch[0]){
				add(m*(i-1)+j,m*i+j+1,0);
				add(m*i+j+1,m*(i-1)+j,0);
				add(m*(i-1)+j+1,m*i+j,1);
				add(m*i+j,m*(i-1)+j+1,1);
			} 
			else if(qwq=='/'){
				add(m*(i-1)+j,m*i+j+1,1);
				add(m*i+j+1,m*(i-1)+j,1);
				add(m*(i-1)+j+1,m*i+j,0);
				add(m*i+j,m*(i-1)+j+1,0);
			}
		}
	}
	bfs();
//	for(int i=1;i<=n*m+m;i++) cout<<dist[i]<<" ";
    if(dist[n*m+m+1]>0x3f3f3f3f/2) cout<<"NO SOLUTION";
	else cout<<dist[n*m+m+1];
	return 0;
}

一组数据:

输入

3 5
/\/\/
//\/\
/\\\\

正确输出

3

错误输出

2
2020/5/9 22:25
加载中...