我把2000改成1000就过了。。。
按理说2000WA了一个点,那改小了只是降低了大小,怎么会A了呢?
90pt
/*
Name: pvz_bt
Copyright: pvz_bt
Author: pvz_bt
Begin Time : 13/03/22 16:47
End Time :
Description: C++
*/
#include<bits/stdc++.h>
using namespace std;
long long n=0,m=0,v=0,x=0,y=0,goal=0,cnt=0,ans=1e18;
long long head[1000001];
struct node{
long long to;
long long next;
}edge[2000001];
void new_line(long long a,long long b){
edge[++cnt].to=b;
edge[cnt].next=head[a];
head[a]=cnt;
return;
}
long long dfs(long long x,long long step,long long sum){
if(step>n*m)
return 1e18;
if(x==goal)
return sum;
return dfs(edge[head[x]].to,step+1,sum+v*abs((x/2000)-(edge[head[x]].to/2000)));
}
int main(){
scanf("%lld%lld%lld%lld%lld",&n,&m,&v,&x,&y);
goal=x*2000+y;
for(long long i=1;i<=n;++i){
for(long long j=1;j<=m;++j){
long long a=0,b=0;
scanf("%lld%lld",&a,&b);
new_line(i*2000+j,a*2000+b);
}
}
for(long long i=1;i<=m;++i)
ans=min(ans,dfs(2000+i,1,0));
if(ans==1e18)
printf("impossible\n");
else
printf("%lld\n",ans);
return 0;
}
100pt
/*
Name: pvz_bt
Copyright: pvz_bt
Author: pvz_bt
Begin Time : 13/03/22 16:47
End Time :
Description: C++
*/
#include<bits/stdc++.h>
using namespace std;
long long n=0,m=0,v=0,x=0,y=0,goal=0,cnt=0,ans=1e18;
long long head[1000001];
struct node{
long long to;
long long next;
}edge[2000001];
void new_line(long long a,long long b){
edge[++cnt].to=b;
edge[cnt].next=head[a];
head[a]=cnt;
return;
}
long long dfs(long long x,long long step,long long sum){
if(step>n*m)
return 1e18;
if(x==goal)
return sum;
return dfs(edge[head[x]].to,step+1,sum+v*abs((x/1000)-(edge[head[x]].to/1000)));
}
int main(){
scanf("%lld%lld%lld%lld%lld",&n,&m,&v,&x,&y);
goal=x*1000+y;
for(long long i=1;i<=n;++i){
for(long long j=1;j<=m;++j){
long long a=0,b=0;
scanf("%lld%lld",&a,&b);
new_line(i*1000+j,a*1000+b);
}
}
for(long long i=1;i<=m;++i)
ans=min(ans,dfs(1000+i,1,0));
if(ans==1e18)
printf("impossible\n");
else
printf("%lld\n",ans);
return 0;
}