扩散 floyd

 

 

给N个点 ,每个点每秒向四周扩散,问他们什么时候能全部联通

 

题解 floyd 一下这N个点的距离

距离最大的两个点即为答案

代码

 

#include<bits/stdc++.h>
using namespace std;
int n,maxx;
int x[55],y[55];
int g[55][55];
int main()
{
    cin>>n;
    for(int i=1;i<=n;i++)
      cin>>x[i]>>y[i];
    

    for(int i=1;i<=n;i++)
        for(int j=1;j<=n;j++)
            g[i][j]=abs(x[i]-x[j])+abs(y[i]-y[j]);
    
  
    for(int k=1;k<=n;k++)
        for(int i=1;i<=n;i++)
            for(int j=1;j<=n;j++)
                g[i][j]=min(max(g[i][k],g[k][j]),g[i][j]);
                

    for(int i=1;i<=n;i++)
        for(int j=1;j<=n;j++)
            maxx=max(maxx,g[i][j]);
            
   
    cout<<((maxx+1)>>1);
    return 0;
}

 

posted @ 2020-07-22 16:49  摸鱼选手LLF  阅读(102)  评论(0编辑  收藏  举报