HDU 1863 并查集+最小生成树
2013-07-24 21:46
295 查看
//并查集+最小生成树,然后贴码 #include <iostream> #include <algorithm> using namespace std; #define N 105 struct node{ int from,to,w; }edge ; int f ,n,m; int Find(int u){ if(u==f[u])return u; return f[u]=Find(f[u]); } bool cmp(node a,node b){return a.w<b.w;} int main(){ while(cin>>n>>m,n){ int i,min=1<<30; for(i=0;i<n;i++) { cin>>edge[i].from>>edge[i].to>>edge[i].w; min=min<edge[i].w?min:edge[i].w; } if(m==1 || m==2){cout<<min<<endl;continue;} if(n<m-1){cout<<"?"<<endl;continue;} sort(edge,edge+n,cmp); int ans=0,num=0; for(i=1;i<=m;i++)f[i]=i; for(i=0;i<n;i++) { int u=edge[i].from,v=edge[i].to; if(Find(u)!=Find(v)) { f[v]=f[u]; ans+=edge[i].w; num++; if(num ==m-1)break; } } if(num==m-1)cout<<ans<<endl; else cout<<"?"<<endl; } return 0; }
相关文章推荐
- hdu1863-畅通工程 最小生成树的并查集实现方法
- hdu 1863 畅通工程 最小生成树+并查集
- HDU-1863(最小生成树+并查集判断是否连通)
- hdu1863-畅通工程 最小生成树的并查集实现方法
- hdu-1863畅通工程 最小生成树克鲁斯卡尔算法kruskal(并查集实现)&&prim普利姆算法实现
- 畅通工程 hdu 1863 最小生成树+并查集 浙大计算机研究生复试上机考试-2007年
- hdu 1863 最小生成树+并查集 (Kruskal)
- hdu 1863畅通工程(prim最小生成树)
- 最小生成树之 prim算法和kruskal算法(以 hdu 1863为例)
- HDU 1863 畅通工程 (最小生成树)
- (最小生成树)HDU 1863 畅通工程
- HDU 1863 畅通工程(最小生成树-Kruskal)
- HDU 4463--最小生成树+并查集标记
- HDU 5253 最小生成树(kruskal)+ 并查集
- HDU 1863 畅通工程 (克鲁斯卡尔—最小生成树)
- <hdu - 1863> 畅通工程 并查集和最小生成树问题
- HDU - 1875 畅通工程再续(并查集,最小生成树)
- hdu 1233 还是畅通工程 (最小生成树,prim,优先队列,kruskal并查集)
- HDU 1863 畅通工程(最小生成树 kruskal算法)
- HDU - 1863 畅通工程(最小生成树kruskal)