博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
HDOJ 1863
阅读量:6756 次
发布时间:2019-06-26

本文共 2041 字,大约阅读时间需要 6 分钟。

#include
#include
int father[105],depth[105];int dist[105],map[101][101];int vis[105],n;void init_B(){ int i; for(i = 1;i <= n;i ++) { father[i] = i; depth[i] = 0; }}int find(int x){ if(x == father[x]) return x; return father[x] = find(father[x]);}void unit(int x,int y){ x = find(x); y = find(y); if(x == y) return ; if(depth[x] < depth[y]) father[x] = y; else { if(depth[x] > depth[y]) father[y] = x; else { father[x] = y; depth[y]++; } }}void init(){ int i; memset(vis,0,sizeof(vis)); for(i = 1;i <= n;i ++) dist[i] = map[1][i];}int main(){ int m,i,j,k,a,b; int min,cnt,cost,sum; while(~scanf("%d%d",&m,&n) && m) { init_B(); sum = cnt = 0; for(i = 1;i <= n;i ++) { for(j = 1;j <= n;j ++) { if(i != j) { map[i][j] = 1 << 30; } } } while(m--) { scanf("%d%d%d",&a,&b,&cost); map[a][b] = map[b][a] = cost; unit(a,b); } init(); for(i = 1;i <= n;i ++) { if(i == find(i)) cnt++; if(cnt == 2) break ; } if(cnt == 2) { printf("?\n"); continue ; } for(i = 0;i < n;i ++) { min = 1 << 30; for(j = 1;j <= n;j ++) { if(!vis[j] && min > dist[j]) { min = dist[j]; k = j; } } vis[k] = 1; if(min != 1 << 30) sum += min; for(j = 1;j <= n;j ++) { if(!vis[j] && dist[j] > map[k][j]) dist[j] = map[k][j]; } } printf("%d\n",sum); } return 0;}

转载于:https://www.cnblogs.com/wangzhili/p/3950361.html

你可能感兴趣的文章
单例模式
查看>>
.NET实现多个不同有效时间Session方案思考
查看>>
移动端常见问题及解决方案
查看>>
Github 使用的Markdown语言
查看>>
UVA 247 - Calling Circles (Floyd)
查看>>
Exchange: How to get Mailbox size in Exchange Shell?
查看>>
SqlBulkCopy使用心得
查看>>
几点要求自己也可以借鉴
查看>>
Highcharts的一些属性
查看>>
xadmin 组件拓展自定义使用
查看>>
5.14 数据库函数,流程控制
查看>>
Django 中间件
查看>>
学城项目知识点整理及源码
查看>>
sqlServer,oracle中case关键字的用法
查看>>
表驱动法之保险费率
查看>>
苹果硅胶套市场空间上百亿:合作厂商利润达30%
查看>>
娇俏2011年春装
查看>>
备份还原oracle数据库
查看>>
[转载] AUML——FIPA Modeling Technical Committee
查看>>
Samba Server Configuration - Simple
查看>>