1006-F专题四

来源:互联网 发布:施乐cp105b监控软件 编辑:程序博客网 时间:2024/05/21 10:51

1.题意:修路问题,给定距离,求修路的最小花费。

2.思路:最小生成树的题目,使用的Prim算法,选一个节点放到数组中,找出和他相邻的最便宜的节点,再把这个节点放到数组中,然后继续重复这个步骤,金钱也不断的累加,最后输出金钱数目。

3.感想:这道题与前六个相似,代码结构相同。

#include<iostream>#include<cstdio>#include<algorithm>using namespace std;char p[1000];int n,k;struct road{char s,e;int w;}r[1000];bool cmp(road am,road bm){ return am.w<bm.w; }char find(char x){ return p[x]==x?x:p[x]=find(p[x]); }int kru(){int sum=0;for(int i=0;i<k;i++){char x=find(r[i].s),y=find(r[i].e);if(x!=y){p[x]=y;sum+=r[i].w;}}return sum;}int main(){while(cin>>n&&n){char rs,re;int m,rw;k=0;n--;while(n--){cin>>rs>>m;while(m--){cin>>re>>rw;r[k].s=rs;r[k].e=re;r[k].w=rw;k++;}}for(char i='A';i<='Z';i++)p[i]=i;sort(r,r+k,cmp);cout<<kru()<<endl;}return 0;}


0 0
原创粉丝点击