http://acm.nyist.net/JudgeOnline/problem.php?pid=434

来源:互联网 发布:金三税个人所得税软件 编辑:程序博客网 时间:2024/04/29 13:46

一道最小生成树的题,属于模板题,,,,月赛竟然弄了这么长时间,才AC,这道替我用的是prim算法,用krusal也可以,,,

  #include<iostream>#include<string.h>#include<algorithm>#define N 28#define M 99999999using namespace std;int map[N][N];int dist[N];bool visit[N];int n,m;void prim(){  int i,j;for( i=1;i<=m;++i){ dist[i]=M;      visit[i]=true;}int now=1;   dist[now]=0;   visit[now]=false;   int ans=0;   for( i=1;i<=m;i++)   {     ans+=dist[now];   for( j=1;j<=m;++j)       if(visit[j]&&dist[j]>map[now][j])    dist[j]=map[now][j];    int minx=M;    for(j=1;j<=m;j++)   if(dist[j]<minx&&visit[j])   minx=dist[now=j];       visit[now]=false;   }   cout<<ans<<endl;}int main(){  while(cin>>n&&n){   int nn,i,j,s,aa,bb;      char ch,mm;  m=0;for( i=1;i<=28;++i)for( j=1;j<=28;j++)    map[i][j]=M;    for( i=1;i<=n-1;++i){   cin>>ch;     bb=(int)(ch-64);cin>>nn;for( j=1;j<=nn;++j){   cin>>mm;cin>>s;    aa=(int)(mm-64);if(aa>m) m=aa;   if(map[bb][aa]>s)   { map[bb][aa]=s;  map[aa][bb]=s;   }}}prim();}return 0;}                


原创粉丝点击