hdu 1863 畅通工程(MST,prim)
来源:互联网 发布:艾宾浩斯记忆曲线软件 编辑:程序博客网 时间:2024/05/24 07:36
题目:http://acm.hdu.edu.cn/showproblem.php?pid=1863
大同小异
#include<cstdio>#include<iostream>#include<algorithm>#include<cstring>using namespace std;const int maxn=110;const int maxcost=99999999;int graph[maxn][maxn],lowcost[maxn];int prim(int n){ int lowcost[maxn]; int mst[maxn]; int i,j,minn,minid,sum=0; for(i=2;i<=n;i++){ //lowcost初始化 lowcost[i]=graph[1][i]; mst[i]=1; } mst[1]=0; for(i=2;i<=n;i++){ minn=maxcost; minid=0; for(j=2;j<=n;j++){ if(lowcost[j]<minn&&lowcost[j]!=-1){ //上一层已经把找过的赋为-1 minn=lowcost[j]; minid=j; } } if(minn==maxcost) return -1; //不连通 //printf("%c - %c : %d\n", mst[minid] + 'A' - 1, minid + 'A' - 1, min); sum+=minn; lowcost[minid]=-1; for(j=2;j<=n;j++){ //找新起点,谁小换谁,相同不换 if(graph[minid][j]<lowcost[j]){ lowcost[j]=graph[minid][j]; mst[j]=minid; //mst中每一个都是minid,到下次时可以表示起点,然后 - 下一个minid } } } return sum;}int main(){ int n,m,a,b,val; while(scanf("%d%d",&n,&m)==2&&n){ fill(graph[0],graph[0]+maxn*maxn,maxcost); fill(lowcost,lowcost+maxn,maxcost); for(int i=0;i<n;i++){ scanf("%d%d%d",&a,&b,&val); graph[a][b]=graph[b][a]=val; } int ans=prim(m); if(ans==-1) printf("?\n"); else printf("%d\n",prim(m)); } return 0;}
阅读全文
0 0
- hdu 1863 畅通工程(MST,prim)
- hdu 1233 还是畅通工程 (MST,Prim)
- HDU -- 1863 畅通工程 (mst)
- [MST]HDU 1863 畅通工程
- hdu 1863 畅通工程 (prim)
- HDU 1863 畅通工程(prim算法)
- HDU-#1863 畅通工程(Kruskal & Prim)
- hdu 1863 畅通工程(prim+kruskal)
- HDU 1863畅通工程【Prim】
- HDU -- 1233 还是畅通工程(mst)
- HDU -- 1789 继续畅通工程(mst)
- HDU 1233 还是畅通工程 (MST)
- hdu 1233 还是畅通工程(MST)
- 畅通工程(MST)
- 畅通工程(MST)
- HDU 1863 畅通工程(最小生成树prim算法)
- HDU 1863 畅通工程(prim,kruscal,并查集)
- HDU - 1863 - 畅通工程 (最小生成树!!prim算法!!)
- table 搜索内容
- 394 decode string
- HTTP Session
- HttpURLConnection的get请求
- Can Place Flowers
- hdu 1863 畅通工程(MST,prim)
- 区分高通和MTK平台
- cookie设置,获取,删除。
- JAVA集合
- JAVA发送http get/post请求,调用http接口、方法
- Slim Span 求一颗生成树 使得最大边与最小边的差值最小
- SyntaxError: EOL while scanning string literal问题及解决方法
- SpringAOP原理
- Mysql学习记二