克魯斯卡爾 最小生成樹集錦

2021-07-16 08:49:12 字數 2560 閱讀 8058

狀態是1的兩個分量直接聯通,然後套模板。

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

using

namespace

std;

#define maxn 1e+9

int pa[10000];

int ranke[10000];

int find(int x)

return pa[x];

}void unin(int x,int y)

else

}typedef

struct qz

;bool cmp(const qz &a,qz &b)

for(int i=0;iint aa,bb,cc,dd;

scanf("%d%d%d%d",&aa,&bb,&cc,&dd);

if(dd==1)

else

}sort(s,s+m,cmp);

int res=0;

int countt=0;

for(int i=0;iif(flag==0) }}

printf("%d\n",res);

}return

0;}

算出每兩個島之間的距離,判斷一下,然後再用模板。

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

using

namespace

std;

int pa[10000];

int ranke[10000];

int find(int x)

void unin(int x,int y)

}typedef

struct qz;

bool cmp(const qz& a,const qz &b)

for(int i=0;iscanf("%d%d",&a[i],&b[i]);}

for(int i=0;ifor(int j=i+1;jdouble z=fabs(sqrt(pow(a[j]-a[i],2)+pow(b[j]-b[i],2)));

if(z>=10.0&&z<=1000.0)}}

sort(s.begin(),s.end(),cmp);

int countt=0;

double ans=0.0;

for(int i=0;iif(find(e.v)!=find(e.u))

}if(countt==n-1)printf("%.1lf\n",ans*100);

else

printf("oh!\n");

}return

0; }

方法如上,先打出素數表,然後依次求得距離,特麼的要注意,1不是素數…

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

using

namespace

std;

const

int maxn=2000005;

int a[maxn];

void prime()

}} int pa[200000];

int ranke[200000];

int find(int x)

void unin(int x,int y)

}typedef

struct qz;

bool cmp(const qz& a,const qz &b)

int n;

memset(dd,0,sizeof(dd));

scanf("%d",&n);

vector

s; for(int i=1;i<=n;i++)scanf("%d",&dd[i]);

for(int i=1;i<=n;i++)}}

sort(s.begin(),s.end(),cmp);

int countt=0;

long

long res=0;

for(int i=0;iint c=e.v;

int cc=e.u;

if(find(e.v)!=find(e.u))

}if(countt==n-1)printf("%lld\n",res);

else

printf("-1\n");

}return

0; }

最小生成樹 克魯斯卡爾演算法

c node.h檔案 儲存頂點資訊 class c node c node c node c node p node c node c node c node c node char p data node.h檔案,儲存邊資訊 include class link node link node li...

最小生成樹( 克魯斯卡爾演算法)

name author date 01 12 14 20 17 description 最小生成樹 克魯斯卡爾演算法 關於並查集的演算法,參見 一種簡單而有趣的資料結構 並查集 include include define maxn 1000 最大頂點數量 define max 20000 最大邊數...

最小生成樹 克魯斯卡爾方法

原文出自 個人非常喜歡這段 不是特別難,但是又新學到了東西。思路還特別清晰。給這個博主膜拜了。有n個城市,你要把他們用隧道連起來,問最少修多少公尺的隧道。include include include include include include include include include d...