zoukankan      html  css  js  c++  java
  • SDOI2012 Round1 day2 拯救小云公主(dis)解题报告

     

    #include<cstdio>
    #include<cmath>
    #include<iostream>
    using namespace std;
    typedef long long ll;
    typedef double real;
    
    #define setfire(name) freopen(#name".in","r",stdin);freopen(#name".out","w",stdout);
    #define fre(name) freopen(#name".txt","r",stdin);
    #define debug(x) cout<<#x<<" "<<x<<'
    ';
    #ifdef WIN32
    #define LL "%I64d"
    #else
    #define LL "%lld"
    #endif
    
    const int N=3005;
    const real inf=1e14;
    struct M{int x,y;}a[N];
    int n,row,line,S,T,q[N*30];bool vis[N*30];
    real ans,g[N][N],dis[N];
    double get_dis(M a,M b){
        int tx=a.x-b.x,ty=a.y-b.y;
        return sqrt(tx*tx+ty*ty);
    }
    void init(){
        scanf("%d%d%d",&n,&row,&line);S=n+1;T=S+1;
        for(int i=1,x,y;i<=n;i++) scanf("%d%d",&a[i].x,&a[i].y);
    }
    void mapping(){
        for(int i=1;i<=n;i++) 
    //        g[S][i]=g[i][S]=min(a[i].x-1,row-a[i].x),//居然还90 
    //        g[T][i]=g[i][T]=min(a[i].y-1,line-a[i].y);
            g[S][i]=g[i][S]=min(a[i].x-1,line-a[i].y),
            g[T][i]=g[i][T]=min(a[i].y-1,row-a[i].x);
        for(int i=1;i<=n;i++)
            for(int j=i;j<=n;j++)
                g[i][j]=g[j][i]=get_dis(a[i],a[j])/2.0;
        ans=inf;
        for(int i=1;i<=n;i++)
            ans=min(ans,get_dis(a[i],(M){1,1})),
            ans=min(ans,get_dis(a[i],(M){row,line}));
        g[S][T]=g[T][S]=min(row-1,line-1);
    }
    void spfa(){
        for(int i=1;i<=T;i++) vis[i]=0,dis[i]=inf;
        unsigned short h=0,t=1;real dl;
        q[t]=S;dis[S]=0;
        while(h!=t){
            int x=q[++h];vis[x]=0;//少打个标记90变30 
            for(int i=1;i<=T;i++){
                if(x!=i&&(dl=max(dis[x],g[x][i]))<dis[i]){
                    dis[i]=dl;
                    if(!vis[i]){
                        vis[i]=1;
                        q[++t]=i;
                    }
                }
            }
        }
    }
    int main(){
        setfire(dis);
        init();
        mapping();
        spfa();
        ans=min(ans,dis[T]);
        printf("%.2lf",ans);
        return 0;
    }
  • 相关阅读:
    MySQL 复制表结构和表数据
    学习使用Guava Retryer
    Maven 常用工具类整理
    转 全面理解Javascript闭包和闭包的几种写法及用途
    Python的全局变量
    python的内存管理机制
    Python 隔离沙箱 virtualenv
    <script> 的defer和async
    高性能Javascript(2) DOM编程
    高性能Javascript(1)
  • 原文地址:https://www.cnblogs.com/shenben/p/6417422.html
Copyright © 2011-2022 走看看