Jungle Roads(POJ1251)(primer)

来源:互联网 发布:柴庆丰事件知乎 编辑:程序博客网 时间:2024/05/01 20:45

どこでもドア:http://poj.org/problem?id=1251
prim算法入门;

#include<iostream>#include<cstdio>#include<algorithm>#include<cmath>#include<cstring>#include<string>#include<sstream>#include<set>#include<cstdlib>#include<map>#include<queue>using namespace std;typedef long long LL;const int INF = 0x3f3f3f3f;//最大值const int MAXN = 103;int edge[MAXN][MAXN];int T[MAXN];int low_w[MAXN];int N,M;int prim(int start){    int Tsum=0;int vn=0;    T[start]=1;    for(int i=1;i<=MAXN;i++)        low_w[i]=edge[start][i];    for(int i=1;i<=MAXN;i++)    {        int V=-1;        int minn=INF;        for(int j=1;j<=MAXN;j++)        {            if(low_w[j]<minn&&!T[j])            {                minn=low_w[j];                V=j;            }        }        if(V!=-1)        {            T[V]=1;Tsum+=low_w[V];vn++;            for(int j=1;j<=MAXN;j++)            {                if(!T[j] && low_w[j] > edge[V][j])                    low_w[j] = edge[V][j];            }        }    }    return Tsum;}int main(){    int t,n,x;char c0,c;    while(cin>>t&&t){        memset(T,0,sizeof(T));        memset(edge,INF,sizeof(edge));        memset(low_w,0,sizeof(low_w));        while(--t){            cin>>c0>>n;            while(n--){                cin>>c>>x;                edge[(int)(c0-'A')+1][(int)(c-'A')+1]=edge[(int)(c-'A')+1][(int)(c0-'A')+1]=x;            }        }        int ans=prim(1);        cout<<ans<<endl;    }    return 0;}
0 0