uva 1395 slim span MST
2017-04-19 12:44
483 查看
(注意看样例来确定自己的枚举,不要再出这样的错误了。。
#include<cstdio> #include<cstring> #include<algorithm> #include<queue> #include<string> #include<cstring> #include<iomanip> #include<iostream> #include<stack> #include<cmath> #include<map> #include<vector> #define ll long long #define inf 0x3f3f3f3f #define INF 1e9 #define bug1 cout<<"bug1"<<endl; #define bug2 cout<<"bug2"<<endl; #define bug3 cout<<"bug3"<<endl; using namespace std; #define sf scanf #define pf printf #define mem(a,b) memset(a,b,sizeof(a)); int n,m; const int maxn=105; struct Edge{ int u,v,c; bool friend operator<(Edge a,Edge b){ return a.c<b.c; } }edge[maxn*maxn/2]; int fa[maxn]; int find(int x){ return x==fa[x]?x:fa[x]=find(fa[x]); } int main(){ while(~scanf("%d%d",&n,&m)&&n+m){ for(int i=1;i<=m;++i){ int u,v,c; sf("%d%d%d",&edge[i].u,&edge[i].v,&edge[i].c); } sort(edge+1,edge+1+m); int L=1,R=L+n-1; int ans=INF; for(L=1;L<=m-n+2;++L){//这个地方我因为一开始写的是m-n+1,结果样例答案都错了。。 //我应该花一些时间来看下第一个样例。然后觉得m-n+1 还是多少。。 for(R=L;R<=m;++R){//这个地方也是,我想用R=L+n-1,还是会错 for(int k=1;k<=n;++k)fa[k]=k; int fg=0; int cnt=0; for(int i=L;i<=R;++i){ int fx=find(edge[i].u);int fy=find(edge[i].v); if(fx!=fy){ fa[fx]=fy; cnt++; } if(cnt==n-1){ ans=min(ans,edge[R].c-edge[L].c); fg=1; break; } } if(fg)break; } } if(ans<INF)pf("%d\n",ans); else puts("-1"); } }
相关文章推荐
- UVA 1395 Slim Span (最小生成树,MST,kruscal)
- UVA 1395 - Slim Span(MST)
- UVa 1395 - Slim Span(MST)
- UVA 1395 Slim Span(MST)
- UVA 1395 Slim Span 最小生成树
- [生成树][Uva1395][Slim Span]
- UVA 1395 Slim Span--苗条的生成树(并查集+枚举)
- UVA 1395 Slim Span 最小生成树
- 【UVA 1395】 Slim Span (苗条树)
- uva 1395 Slim Span 最小生成树
- uva 1395 - Slim Span(生成树)
- 例题11-2 UVA - 1395 Slim Span 苗条的生成树(Kruscal最小生成树)
- UVa 1395 Slim Span【最小生成树】
- uva 1395 Slim Span[最小生成树]
- 苗条的生长树slim span,uva1395——最小生成树,kruskal
- UVA - 1395 - Slim Span(Kruskal算法+枚举)
- uva 1395 Slim Span (最小生成树||(最大边减最小边尽量小))
- UVA 1395 Slim Span(枚举)
- UVALive 3887 Slim Span(枚举+MST,4级)
- (UVa 1395)Slim Span (苗条的生成树)(并查集+Kruskal)