POJ 1258 Agri-Net

来源:互联网 发布:美食美客软件 编辑:程序博客网 时间:2024/06/08 11:30

来源:http://poj.org/problem?id=1258

归类: 图论、最小生成树、Prim

Agri-Net
Time Limit: 1000MS Memory Limit: 10000KTotal Submissions: 40209 Accepted: 16380

Description

Farmer John has been elected mayor of his town! One of his campaign promises was to bring internet connectivity to all farms in the area. He needs your help, of course. 
Farmer John ordered a high speed connection for his farm and is going to share his connectivity with the other farmers. To minimize cost, he wants to lay the minimum amount of optical fiber to connect his farm to all the other farms. 
Given a list of how much fiber it takes to connect each pair of farms, you must find the minimum amount of fiber needed to connect them all together. Each farm must connect to some other farm such that a packet can flow from any one farm to any other farm. 
The distance between any two farms will not exceed 100,000. 

Input

The input includes several cases. For each case, the first line contains the number of farms, N (3 <= N <= 100). The following lines contain the N x N conectivity matrix, where each element shows the distance from on farm to another. Logically, they are N lines of N space-separated integers. Physically, they are limited in length to 80 characters, so some lines continue onto others. Of course, the diagonal will be 0, since the distance from farm i to itself is not interesting for this problem.

Output

For each case, output a single integer length that is the sum of the minimum length of fiber required to connect the entire set of farms.

Sample Input

40 4 9 214 0 8 179 8 0 1621 17 16 0

Sample Output

28

Source

USACO 102

题意:略。

题解: Prim模板题~~ 开始敲一个提交超时,特别郁闷~~  扔了几天,今天又看下,改一个程序终止条件就AC了。
原来题目是默认EOF结束,我却自以为是的当做以0结束~~

AC代码:
#include<cstdio>const int INF=1000000000; int n,map[105][105],wage;bool pa[105],pb[105];int pos;void Prim(){while(pos--){int min=INF,x=0,y=0;for(int i=1;i<=n;i++)if(pa[i])for(int j=1;j<=n;j++)if(pb[j]&&map[i][j]&&min>map[i][j]){min=map[i][j];x=i;y=j;}pb[y]=false;pa[y]=true;wage+=min;map[x][y]=0;map[y][x]=0;}}int main(){while(~scanf("%d",&n)){wage=0;for(int i=1;i<=n;i++) {pa[i]=false; pb[i]=true;} pa[1]=true;pb[1]=false; pos=n-1;for(int i=1;i<=n;i++)for(int j=1;j<=n;j++)scanf("%d",&map[i][j]);Prim();printf("%d\n",wage);}return 0;} 



自己敲的代码,有些繁琐,下面贴一个小kd的模板

#include <iostream>#include <cstring>using namespace std;const int V=110;const int MAXINT=0x3f3f3f3f;int map[V][V],dist[V],vist[V];int n,i,j,m,minn,ans;int main(){while (cin>>n){ans=0;memset(vist,0,sizeof(vist));for (i=1;i<=n;++i)for (j=1;j<=n;++j)cin>>map[i][j];for (i=1;i<=n;++i)dist[i]=map[1][i];vist[1]=1;for (i=1;i<n;++i){minn=MAXINT;for (j=1;j<=n;++j)if (!vist[j] && dist[j]<minn){minn=dist[j]; m=j;}ans+=minn;for (j=1;j<=n;++j)dist[j]=dist[j]>map[m][j]?map[m][j]:dist[j];vist[m]=1;}cout<<ans<<endl;}return 0;}





0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 肠子不蠕动严重便秘怎么办 怀孕八个月严重便秘怎么办 怀孕七个月便秘严重怎么办 怀孕两个月便秘严重怎么办 3岁宝宝上火便秘怎么办 7个月的宝宝贫血怎么办 9个月婴儿贫血怎么办 肛裂大便有血怎么办 生完宝宝肛门痛怎么办 肛周脓肿出血了怎么办 胃胀怎么办简单的办法 吃多了胃胀难受怎么办 胃窦炎胆汁反流怎么办 怀孕总胆汁酸高怎么办 胃里胆汁反流怎么办 苦胆水吐出来了怎么办 喝多了吐胆汁怎么办 吐出黄水苦水是怎么办 喝酒喝的一直吐怎么办 孕期总胆汁酸高怎么办 孕早期胆汁酸高怎么办 孕妇总胆汁酸高怎么办 宝宝一天吐了6次怎么办 肛周脓肿破了怎么办 肛周脓肿发烧了怎么办 肛周脓肿便血该怎么办 婴儿得肛周脓肿怎么办 水痘长在龟头上怎么办 轻度萎缩性胃炎伴肠化怎么办 肺癌晚期腿肿了怎么办 胸骨剑突按压痛怎么办 22岁有白头发怎么办 血热导致掉头发怎么办 36岁脱发严重该怎么办 血热引起的脱发怎么办 头发掉的好厉害怎么办 胃热导致的口臭怎么办 肝火和胃火旺盛怎么办 2月宝宝舌苔厚白怎么办 小孩舌头咬破了怎么办 两岁宝宝不说话怎么办