HDOJ 1863 畅通工程
2012-12-15 23:24
302 查看
戳此看题~
最小生成树即可
但是要注意的是给出道路网络可能是两个或多个孤立的网络,这样即使用上所有的边都用上也不能使每两个村庄都相通,最下生成树的边的条数也会比节点数-1还小。(就因为没注意到这一点WA了好几次。。。。
)
AC代码:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAXM 100
#define MAX 1000000
int edge[MAXM][MAXM],lowcost[MAXM],m,edgenum,sum;
int prim()
{
int i,j,k,min;
lowcost[0]=-1;
for(i=1;i<m;i++)
lowcost[i]=edge[0][i];
sum=0;
edgenum=0;
for(i=1;i<m;i++)
{
k=-1;
min=MAX;
for(j=0;j<m;j++)
{
if(lowcost[j]!=-1&&lowcost[j]<min)
{
min=lowcost[j];
k=j;
}
}
if(k!=-1)
{
sum+=min;
lowcost[k]=-1;
edgenum++;
for(j=0;j<m;j++)
{
if(edge[k][j]<lowcost[j])
lowcost[j]=edge[k][j];
}
}
}
return sum;
}
int main()
{
int i,j,u,v,w,n;
while(scanf("%d %d",&n,&m)!=EOF&&n)
{
if(n>=m-1)
{
for(i=0;i<m;i++)
for(j=0;j<m;j++)
edge[i][j]=MAX;
for(i=0;i<n;i++)
{
scanf("%d %d %d",&u,&v,&w);
edge[u-1][v-1]=edge[v-1][u-1]=w;
}
prim();
if(edgenum>=m-1)
printf("%d\n",sum);
else printf("?\n");
}
else
{
for(i=0;i<n;i++)
scanf("%d %d %d",&u,&v,&w);
printf("?\n");
}
}
return 0;
}
最小生成树即可
但是要注意的是给出道路网络可能是两个或多个孤立的网络,这样即使用上所有的边都用上也不能使每两个村庄都相通,最下生成树的边的条数也会比节点数-1还小。(就因为没注意到这一点WA了好几次。。。。
)
AC代码:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAXM 100
#define MAX 1000000
int edge[MAXM][MAXM],lowcost[MAXM],m,edgenum,sum;
int prim()
{
int i,j,k,min;
lowcost[0]=-1;
for(i=1;i<m;i++)
lowcost[i]=edge[0][i];
sum=0;
edgenum=0;
for(i=1;i<m;i++)
{
k=-1;
min=MAX;
for(j=0;j<m;j++)
{
if(lowcost[j]!=-1&&lowcost[j]<min)
{
min=lowcost[j];
k=j;
}
}
if(k!=-1)
{
sum+=min;
lowcost[k]=-1;
edgenum++;
for(j=0;j<m;j++)
{
if(edge[k][j]<lowcost[j])
lowcost[j]=edge[k][j];
}
}
}
return sum;
}
int main()
{
int i,j,u,v,w,n;
while(scanf("%d %d",&n,&m)!=EOF&&n)
{
if(n>=m-1)
{
for(i=0;i<m;i++)
for(j=0;j<m;j++)
edge[i][j]=MAX;
for(i=0;i<n;i++)
{
scanf("%d %d %d",&u,&v,&w);
edge[u-1][v-1]=edge[v-1][u-1]=w;
}
prim();
if(edgenum>=m-1)
printf("%d\n",sum);
else printf("?\n");
}
else
{
for(i=0;i<n;i++)
scanf("%d %d %d",&u,&v,&w);
printf("?\n");
}
}
return 0;
}
相关文章推荐
- HDOJ1863(畅通工程)
- HDOJ1863 畅通工程 最小生成书裸题
- HDOJ 1863 畅通工程(Kruskal最小生成树)
- HDOJ 1863 畅通工程(并查集)
- hdoj 1863 畅通工程
- hdoj 1863 畅通工程
- HDOJ1863-畅通工程
- hdoj1863 畅通工程
- HDOJ -- 1863畅通工程
- HDOJ-1863-畅通工程
- HDOJ 1863 畅通工程 (最小生成树]
- 畅通工程2 HDOJ--1863
- hdoj 1863 畅通工程(最小生成树)
- HDOJ 1863 畅通工程——普利姆算法
- 畅通工程 HDOJ--1863
- HDOJ1863(畅通工程)
- hdoj 1863 畅通工程【最小生成树 kruskal && prim】
- HDOJ 1863 畅通工程(最小生成树--kruskal)
- HDOJ 1863 畅通工程
- HDOJ1863 ( 畅通工程 ) 【最小生成树,kruscal】