poj 2395 Out of Hay

    技术2022-05-20  38

    最小生成树的最大边 #include <iostream> #include <cstring> using namespace std; int vis[2050],dis,edge[2050][2050],lowc[2050],n,m; const int inf=0x3f3f3f3f3f; int prim() { int i,j,p,minc,res=0,maxn=0; memset(vis,0,sizeof(vis)); vis[0]=1; for(i=1;i<n;i++) lowc[i]=edge[0][i]; for(i=1;i<n;i++) { minc=inf; p=-1; for(j=0;j<n;j++) { if(!vis[j] && lowc[j]<minc) { minc=lowc[j]; p=j; } } if(minc==inf) return -1; if(maxn<minc) maxn=minc; res+=minc; vis[p]=1; for(j=1;j<n;j++) if(!vis[j] && lowc[j]>edge[p][j]) lowc[j]=edge[p][j]; } return maxn; } int main() { int i,j,x,y,z; scanf("%d%d",&n,&m); for(i=0;i<n;i++) for(j=0;j<n;j++) edge[i][j]=inf; for(i=0;i<m;i++) { scanf("%d%d%d",&x,&y,&z); x--; y--; if(!edge[x][y]||edge[x][y]>z||edge[y][x]>z) edge[y][x]=edge[x][y]=z; } printf("%d/n",prim()); return 0; }


    最新回复(0)