HDU1863
来源:互联网 发布:java实战项目 编辑:程序博客网 时间:2024/06/07 19:54
这道题意思很简单 要你求出能够到达所有点的一树,很自然就能想到用最小生成树去做,prim和kruscal都可以使用
#include<stdio.h>#include<string.h>#define arr 105#define inf 1<<30int m,g[arr][arr],dis[arr];int Prim(int st){ int i,j,k,Time,ans,mark[arr]; for(i=1;i<=m;i++) dis[i]=g[st][i],mark[i]=0; dis[st]=inf, mark[st]=1; ans=0; for(Time=1;Time<m;Time++){ int min=inf,index=-1; for(i=1;i<=m;i++) if(!mark[i]&&dis[i]<min) min=dis[i],index=i; if(index==-1) return -1; //无法生成一个树; mark[index]=1; ans+= min; for(i=1;i<=m;i++) if(!mark[i]&&g[index][i]<dis[i]) dis[i]=g[index][i]; } return ans;} int main(){ int n,i,j,x,y,t,s; while(scanf("%d%d",&n,&m),n) { for(i=1;i<=m;i++)for(j=1;j<=m;j++)g[i][j]=inf; while(n--){ scanf("%d%d%d",&x,&y,&t); s=x; //任意选一个点作根求最小生成树; if(t<g[x][y]) g[x][y]=g[y][x]=t; } int ans=Prim(s); //Prim()算法求最小生成树; if(ans==-1) puts("?"); else printf("%d\n",ans); }}
0 0
- hdu1863
- HDU1863
- hdu1863
- hdu1863
- HDU1863
- hdu1863
- hdu1863
- hdu1863(prim)
- hdu1863(水)
- 畅通工程 hdu1863
- hdu1863(prim算法)
- HDU1863畅通工程
- HDU1863--畅通工程
- hdu1863-畅通工程
- hdu1863 畅通工程
- HDU1863 畅通工程
- HDU1863畅通工程
- hdu1863畅通工程
- 使用cocos2dx的lua脚本写游戏逻辑
- acm动态规划中新数据对原始数据的干扰和排除
- ORACLE列值合併
- Java集合框架List,Map,Set等全面介绍
- HDU 3466 Proud Merchants
- HDU1863
- 状态压缩DP总结(谨记大牛总结)
- ios应用中利用Google AdMob投放广告
- wiki oi 1009 产生数
- Git 学习笔记
- validation.xml
- SGU 139 Help Needed! 奇偶性
- 仿酷狗音乐播放器开发日志二——搜索栏的编写
- echarts的主题如何设置(郑州就维)