hdu 1102 -Constructing Roads(最小生成树)
2013-04-15 21:29
363 查看
/* 基本的最小生成树问题 将已经存在的边重新建图权值为0,再prim就可以 这个题用prim来做还是比较简单的
*/
#include<cstdio>
#include<cstring>
#define INF 1000+10
int map[110][110],vis[110],low[110];
int prim(int n)
{
int ans=0;
for(int i = 0; i <= n; i++)
{
vis[i] = 0;
low[i] = map[1][i];
}
vis[1] = 1;
for(int i = 1; i <= n; i++)
{
int temp = INF,tp=-1;
for(int j = 1; j <= n; j++)
if(!vis[j]&&temp>low[j])
{
tp = j;
temp = low[j];
}
if(tp==-1) continue;
int k = tp;
vis[k] = 1;
ans += low[k];
for(int j = 1; j <= n; j++)
{
if(!vis[j]&&low[j]>map[k][j])
{
low[j] = map[k][j];
}
}
}
return ans;
}
int main()
{
int n,q,a,b;
while(scanf("%d",&n)==1)
{
memset(map,0,sizeof(map));
for(int i = 1; i <= n; i++)
for(int j = 1; j <= n; j++)
scanf("%d",&map[i][j]);
scanf("%d",&q);
while(q--)
{
scanf("%d%d",&a,&b);
map[a][b]=map[b][a]=0;
}
printf("%d\n",prim(n));
}
}
*/
#include<cstdio>
#include<cstring>
#define INF 1000+10
int map[110][110],vis[110],low[110];
int prim(int n)
{
int ans=0;
for(int i = 0; i <= n; i++)
{
vis[i] = 0;
low[i] = map[1][i];
}
vis[1] = 1;
for(int i = 1; i <= n; i++)
{
int temp = INF,tp=-1;
for(int j = 1; j <= n; j++)
if(!vis[j]&&temp>low[j])
{
tp = j;
temp = low[j];
}
if(tp==-1) continue;
int k = tp;
vis[k] = 1;
ans += low[k];
for(int j = 1; j <= n; j++)
{
if(!vis[j]&&low[j]>map[k][j])
{
low[j] = map[k][j];
}
}
}
return ans;
}
int main()
{
int n,q,a,b;
while(scanf("%d",&n)==1)
{
memset(map,0,sizeof(map));
for(int i = 1; i <= n; i++)
for(int j = 1; j <= n; j++)
scanf("%d",&map[i][j]);
scanf("%d",&q);
while(q--)
{
scanf("%d%d",&a,&b);
map[a][b]=map[b][a]=0;
}
printf("%d\n",prim(n));
}
}
相关文章推荐
- hdu 1102 Constructing Roads (最小生成树)
- hdu 1102 (最小生成树)
- hdu1102 Constructing Roads (最小生成树 prim 算法)
- hdu 1102(最小生成树)
- hdu 1102 Constructing Roads 最小生成树
- hdu-1102 Constructing Roads(最小生成树)
- HDU 1102 Constructing Roads 最小生成树-Kruskal算法
- HDU 1102 Constructing Roads (最小生成树 Prim算法)
- hdu 1102 Constructing Roads (最小生成树)
- HDU 1102 Constructing Roads(prim求最小生成树)
- Constructing Roads - HDU 1102 最小生成树
- HDU 1102 Constructing Roads (最小生成树)
- HDU 1102 Constructing Roads 最小生成树
- Hdu1102 - Constructing Roads - 最小生成树
- hdu1102 hdu1233 hdu4081 hdu4126 最小生成树
- HDU 1102 Constructing Roads(最小生成树 Kruskal算法)
- hdu 1102 Constructing Roads 最小生成树Prim算法AC 水~~~
- hdu1102 Constructing Roads(两种基础最小生成树算法)
- HDU 1102 (最小生成树)
- 最小生成树 (hdu)1102 1162 1233 1301 1863 7875 7873