标签:
加边时把障碍点当作点权为1的边 暴力枚举 在距离<=t的点中统计答案即可(注意初值)
1 #include<cstdio> 2 #include<cstdlib> 3 #include<cstring> 4 #include<ctime> 5 #include<cmath> 6 #include<iostream> 7 #include<algorithm> 8 #include<queue> 9 #include<stack> 10 #include<set> 11 #define clr(a,x) memset(a,x,sizeof(a)) 12 #define rep(i,l,r) for(int i=(l);i<(r);i++) 13 using namespace std; 14 typedef long long ll; 15 typedef pair<int,int> pii; 16 #define mkp(a,b) make_pair(a,b) 17 int read(){ 18 int ans=0,f=1; 19 char c=getchar(); 20 while(!isdigit(c)){ 21 if(c==‘-‘) f=-1; 22 c=getchar(); 23 } 24 while(isdigit(c)){ 25 ans=ans*10+c-‘0‘; 26 c=getchar(); 27 } 28 return ans*f; 29 } 30 const int maxn=40,inf=0x3fffffff; 31 int t,n,m,a[maxn][maxn],d[maxn*maxn]; 32 double ans; 33 int cnt(int x,int y){ 34 return (x-1)*m+y; 35 } 36 double dis(int x1,int y1,int x2,int y2){ 37 return sqrt((x2-x1)*(x2-x1)+(y2-y1)*(y2-y1)); 38 } 39 struct edge{ 40 int v,w; 41 edge*next; 42 }e[maxn*maxn*maxn],*fir[maxn*maxn],*pt=e; 43 void addedge(int u,int v,int w){ 44 pt->v=v;pt->w=w; 45 pt->next=fir[u]; 46 fir[u]=pt++; 47 } 48 void cal(int x,int y){ 49 rep(i,1,cnt(n,m)+1) d[i]=inf;d[cnt(x,y)]=a[x][y]; 50 priority_queue<pii,vector<pii>,greater<pii> >Q; 51 Q.push(mkp(0,cnt(x,y))); 52 while(!Q.empty()){ 53 int Dis=Q.top().first,x=Q.top().second;Q.pop(); 54 if(Dis!=d[x]) continue; 55 for(edge*e=fir[x];e;e=e->next){ 56 if(d[e->v]>d[x]+e->w){ 57 d[e->v]=d[x]+e->w; 58 Q.push(mkp(d[e->v],e->v)); 59 } 60 } 61 } 62 rep(i,1,n+1) 63 rep(j,1,m+1) if(d[cnt(i,j)]<=t) ans=max(ans,dis(i,j,x,y)); 64 } 65 int main(){ 66 n=read();m=read();t=read(); 67 rep(i,1,n+1) 68 rep(j,1,m+1){ 69 char c=getchar(); 70 while(c!=‘0‘&&c!=‘1‘) c=getchar(); 71 a[i][j]=c-‘0‘; 72 } 73 rep(i,1,n+1) 74 rep(j,1,m+1){ 75 if(i-1>0) addedge(cnt(i-1,j),cnt(i,j),a[i][j]); 76 if(i+1<=n) addedge(cnt(i+1,j),cnt(i,j),a[i][j]); 77 if(j-1>0) addedge(cnt(i,j-1),cnt(i,j),a[i][j]); 78 if(j+1<=m) addedge(cnt(i,j+1),cnt(i,j),a[i][j]); 79 } 80 rep(i,1,n+1) 81 rep(j,1,m+1) cal(i,j); 82 printf("%.6lf\n",ans); 83 return 0; 84 }
20%的数据,满足 1 <= N,M <= 30 ; 0 <= T <= 0 。
40%的数据,满足 1 <= N,M <= 30 ; 0 <= T <= 2 。
100%的数据,满足 1 <= N,M <= 30 ; 0 <= T <= 30 。
标签:
原文地址:http://www.cnblogs.com/chensiang/p/4993033.html