sfa
Posted lamboofhome
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了sfa相关的知识,希望对你有一定的参考价值。
#include <bits/stdc++.h> #define M 100005 #define INF 100000; using namespace std; int x,y,i,cent,n,fa[M],que[M],t,ii,ans,a,s,m,j,nn,mins,vis; struct edge int u; int v; int w; bool operator <(const edge &t)const return w<t.w; es[M]; int findloot(int kk) while(fa[kk]!=0) que[++t]=kk,kk=fa[kk]; while(t>0) fa[que[t--]]=kk; return kk; void lianhe(int a,int b) int l=findloot(a); int r=findloot(b); if(l!=r) fa[l]=r; int main() while(~scanf("%d%d",&n,&m)) if(n==0&&m==0) break; ans=INF;vis=0;cent=0; memset(es,0,sizeof(es)); for(i=1;i<=m;i++) scanf("%d%d%d",&x,&y,&a); es[cent].u=x,es[cent].v=y,es[cent++].w=a; sort(es,es+cent-1); for(j=0;j<cent;j++) memset(fa,0,sizeof(fa)); mins=es[j].w; nn=n; for(i=j;i<cent;i++) if(findloot(es[i].u)!=findloot(es[i].v)) lianhe(es[i].u,es[i].v); nn--; if(nn==1) vis=1; ans=min(ans,es[i].w-mins); break;//zhiyi if(vis==1) printf("%d\n",&ans); else cout<<-1;
以上是关于sfa的主要内容,如果未能解决你的问题,请参考以下文章