zoukankan      html  css  js  c++  java
  • POJ 1251 Jungle Roads

    简单,赤裸的最小生成树……

    不过,有一点小障碍的地方是数据的读取!!

    数据中有字符、数字掺杂这输入,整不好就读错!!

    开始我用getchar()光WA,无奈又写个Readint()就可以了!

    View Code
    #include <stdio.h>
    #include <stdlib.h>


    struct Edge
    {
    int v,u;
    int val;
    }edge[200];

    int com(const void *a,const void *b)
    {
    return (*(Edge*)a).val-(*(Edge*)b).val;
    }

    int ancestor[27];
    void Sinit(int n)
    {
    for(int i=1;i<=n;i++) ancestor[i]=i;
    }
    int Sfind(int x)
    {
    if(x!=ancestor[x])
    {
    ancestor[x]=Sfind(ancestor[x]);
    }
    return ancestor[x];
    }
    void Sunion(int x,int y)
    {
    ancestor[ancestor[x]]=ancestor[y];
    }

    int Readint()
    {
    char c;
    int val=0;
    while((c=getchar())<'0'||c>'9');
    do{val=val*10+c-'0';}while((c=getchar())>='0'&&c<='9');
    return val;
    }

    int main()
    {
    int n,m;
    int i,j,val,ind,mincost,cnt;
    char c;
    //freopen("input.txt","r",stdin);
    // freopen("output.txt","w",stdout);
    while(scanf("%d",&n) && n)
    {
    ind=0;
    for(i=1;i<n;i++)
    {
    //getchar();
    //scanf(" %d",&m);
    m=Readint();
    //getchar();
    for(j=0;j<m;j++)
    {
    scanf("%c %d",&c,&val);getchar();
    edge[ind].v=i;
    edge[ind].u=c-'A'+1;
    edge[ind].val=val;
    ++ind;
    }
    //getchar();
    }

    qsort(edge,ind,sizeof(edge[0]),com);
    Sinit(n); mincost=0; cnt=0;

    for(i=0;i<ind;i++)
    {
    if(Sfind(edge[i].v)!=Sfind(edge[i].u))
    {
    Sunion(edge[i].v,edge[i].u);
    mincost+=edge[i].val;
    if(++cnt==(n-1)) break;
    }
    }
    // if(i==ind) printf("NOOOOOOOOOOOOOOOOOOOOOOO!\n");
    printf("%d\n",mincost);

    }
    return 0;
    }


  • 相关阅读:
    清北学堂(2019 5 3) part 6
    清北学堂(2019 5 2) part 5
    清北学堂(2019 5 1) part 4
    dijkstra
    清北学堂(2019 4 30 ) part 3
    2020/5/1
    2020/4/30
    2020/4/29
    HSV模型
    2020/4/28
  • 原文地址:https://www.cnblogs.com/fornever/p/2220734.html
Copyright © 2011-2022 走看看