• HDOJ 1301最小生成树的Kruskal算法


    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1301

    将结点的字符信息处理成点信息即可,代码如下:

     1 #include<bits/stdc++.h>
     2 using namespace std;
     3 typedef unsigned int ui;
     4 typedef long long ll;
     5 typedef unsigned long long ull;
     6 #define pf printf
     7 #define mem(a,b) memset(a,b,sizeof(a))
     8 #define prime1 1e9+7
     9 #define prime2 1e9+9
    10 #define pi 3.14159265
    11 #define lson l,mid,rt<<1
    12 #define rson mid+1,r,rt<<1|1
    13 #define scand(x) scanf("%llf",&x) 
    14 #define f(i,a,b) for(int i=a;i<=b;i++)
    15 #define scan(a) scanf("%d",&a)
    16 #define mp(a,b) make_pair((a),(b))
    17 #define P pair<int,int>
    18 #define dbg(args) cout<<#args<<":"<<args<<endl;
    19 #define inf 0x3f3f3f3f
    20 const int maxn=1e6+10;
    21 int n,m,t;
    22 inline int read(){
    23     int ans=0,w=1;
    24     char ch=getchar();
    25     while(!isdigit(ch)){if(ch=='-')w=-1;ch=getchar();}
    26     while(isdigit(ch))ans=(ans<<3)+(ans<<1)+ch-'0',ch=getchar();
    27     return ans*w;
    28 }
    29 struct node{
    30     int u,v,w;
    31 }e[maxn];
    32 int cnt=0,ans;
    33 int f[maxn];
    34 void init()
    35 {
    36     f(i,1,n)f[i]=i;
    37     cnt=0;
    38     ans=0;
    39 }
    40 bool cmp(node& a,node& b)
    41 {
    42     return a.w<b.w;
    43 }
    44 int find(int x)
    45 {
    46     return x==f[x]?x:f[x]=find(f[x]);
    47 }
    48 void Union(int x,int y,int w)
    49 {
    50     int fx=find(x);
    51     int fy=find(y);
    52     if(fx==fy)return;
    53     else 
    54     {
    55         f[fx]=fy;
    56         ans+=w;
    57     }
    58 }
    59 int main()
    60 {
    61     //freopen("input.txt","r",stdin);
    62     //freopen("output.txt","w",stdout);
    63     std::ios::sync_with_stdio(false);
    64     while(scan(n))
    65     {
    66         if(!n)break;
    67         init();
    68         char s[5];
    69         f(i,1,n-1)
    70         {
    71             scanf(" %s",s);
    72             int tmp1=s[0]-'A'+1;
    73             m=read();
    74             while(m--)
    75             {
    76                 scanf("%s",s);
    77                 t=read();
    78                 int tmp2=s[0]-'A'+1;
    79                 e[++cnt].u=tmp1;
    80                 e[cnt].v=tmp2;
    81                 e[cnt].w=t;
    82             }
    83         }
    84         sort(e+1,e+cnt+1,cmp);
    85         f(i,1,cnt)Union(e[i].u,e[i].v,e[i].w);
    86         pf("%d
    ",ans);
    87     }
    88 } 
  • 相关阅读:
    九、顺序表和单链表的对比分析
    八、单链表的实现
    七、线性表的链式存储结构
    【小白成长撸】--顺序栈(C语言版)
    【小白成长撸】--反向链表(一)
    【小白成长撸】--链表创建
    股票数据获取(参考用)
    VBA运用3_股票_Module2
    VBA运用3_股票_Module1
    股市交易时间
  • 原文地址:https://www.cnblogs.com/randy-lo/p/12571256.html
Copyright © 2020-2023  润新知