hdu 3371 最小生成树(有重边)
2011-12-01 16:42
288 查看
G++提交又超市了,囧
c++就AC了
开始没有判重,错了几遍
最小生成树简dan题
prim和克鲁斯卡尔
View Code
c++就AC了
开始没有判重,错了几遍
最小生成树简dan题
prim和克鲁斯卡尔
View Code
#include<stdio.h> #include<string.h> #define inf 99999999 int flag[500]; int D[500]; int map[505][505]; int n,i,j; int prime()//下标1开始 { int v,k; int ret=0,mi; for(i=1;i<=n;i++){ flag[i]=0; D[i]=inf; }D[1]=0;flag[1]=1;v=1; for(k=1;k<n;k++){ for(i=1;i<=n;i++)if(!flag[i]){ if(map[v][i]<D[i]) D[i]=map[v][i]; } mi=inf; for(i=1;i<=n;i++) if(!flag[i]&&D[i]<mi) mi=D[v=i]; flag[v]=1; ret+=mi; } return ret; } int num[505]; int main() { int t,m,k,x,i,j; scanf("%d",&t); while(t--) { int a,b,w; scanf("%d%d%d",&n,&m,&k); for(i=1;i<=n;i++) { map[i][i]=0; for(j=i+1;j<=n;j++) map[i][j]=map[j][i]=inf; } for(i=0;i<m;i++) { scanf("%d%d%d",&a,&b,&w); if(w<map[a][b]) map[a][b]=map[b][a]=w; } for(i=0;i<k;i++) { scanf("%d",&m); for(j=0;j<m;j++) scanf("%d",&num[j]); for(j=0;j<m;j++) for(x=j+1;x<m;x++) map[num[j]][num[x]]=map[num[x]][num[j]]=0; } int ans=prime(); if(ans>=inf) printf("-1\n"); else printf("%d\n",ans); } return 0; }
相关文章推荐
- HDU 3371(最小生成树,Prim)
- HDU 3371 Connect the Cities 【最小生成树,Prime算法+Kruskal算法】
- HDU-3371 Connect the Cities(最小生成树)
- HDU 3371 Connect the Cities(最小生成树)
- hdu 3371 Connect the Cities(最小生成树))
- 文章标题 HDU 3371 : Connect the Cities(最小生成树--Kruskal+并查集)
- HDU 3371 Connect the Cities 最小生成树
- hdu 3371(Connect the Cities)(最小生成树)
- HDU 3371 Connect the Cities (最小生成树+克鲁斯卡尔算法)
- (最小生成树)hdu 3371
- hdu 3371 Connect the Cities(最小生成树kruskal)
- hdu 3371 Connect the Cities 最小生成树
- hdu 3371 Connect the Cities 最小生成树(kruskal算法)
- hdu3371——最小生成数
- HDU 3371 Connect the Cities (最小生成树 并查集+克鲁斯卡尔)
- (step6.1.7)hdu 3371(Connect the Cities——最小生成树)
- hdu 3371(启发式合并的最小生成树)
- hdu 3371 最小生成树Connect the Cities
- HDU_3371 Connect the cities(最小生成树)
- hdu 3371 Connect the Cities (最小生成树Prim)