公路修建,洛谷之提高历练地,最小生成树

正题

      第四题:公路修建

      这道题的第二个说明是用来误导你的,因为它是一个等边三角形,很容易就可以知道了。

      另外我们来讨论数据范围,n是5000,又因为它是一张完全图。所以边数就有25000000条。那么如果我们用n的平方的prim算法,就可以卡过所有的数据点了。(用堆优化不行,因为复杂度是mlogn,很大)

代码<注意变量名的使用>

// luogu-judger-enable-o2
#include
#include
#include
#include
#include
using namespace std;

int n;
struct node{
    double x,y;
}op[5010];
bool tf[5010];
double dist[5010];

double dis(int x,int y){
    double x1=op[x].x,y1=op[x].y,x2=op[y].x,y2=op[y].y;
    return sqrt((x1-x2)*(x1-x2)+(y1-y2)*(y1-y2));
}

int main(){
    scanf("%d",&n);
    for(int i=1;i<=n;i++){
        double x,y;
        scanf("%lf %lf",&x,&y);
        op[i].x=x;op[i].y=y;
    }
    fill(dist,dist+1+n,1e9);
    double tot=0;
    dist[1]=0;
    for(int i=1;i<=n;i++){
    	double mmin=1e9;
    	int o;
    	for(int j=1;j<=n;j++)
    		if(!tf[j] && dist[j]

你可能感兴趣的:(公路修建,洛谷之提高历练地,最小生成树)