zoukankan      html  css  js  c++  java
  • HDOJ 1863 prim算法 HDOJ 1879

     1 #include<cstdio>
     2 #include<cstring>
     3 #define inf 0xffffff
     4 int g[101][101];
     5 int ans;
     6 void prim(int n)
     7 {
     8     int lowcost[101],used[101],i,j,k,min,closet[101];
     9     memset(used,0,sizeof(used));
    10     for(i=1;i<=n;i++)
    11         lowcost[i]=g[i][1],closet[i]=1;
    12     used[1]=1;
    13     for(i=1;i<n;i++)
    14     {
    15         j=1;
    16         min=inf;
    17         for(k=2;k<=n;k++)
    18         {
    19             if(lowcost[k]<min&&!used[k])
    20                 min=lowcost[k],
    21                 j=k;
    22         }
    23         ans+=g[j][closet[j]];
    24         used[j]=1;
    25         for(k=2;k<=n;k++)
    26         {
    27             if(g[k][j]<lowcost[k]&&!used[k])
    28                 lowcost[k]=g[k][j],
    29                 closet[k]=j;
    30         }
    31     }
    32 
    33 }
    34 int main()
    35 {
    36     int m,n;
    37     while(scanf("%d %d",&m,&n)!=EOF&&m)
    38     {
    39         int i,j;
    40         ans=0;
    41         for(i=1;i<=n;i++)
    42             for(j=1;j<=n;j++)
    43                 g[i][j]=inf;
    44         int a,b,t;
    45         for(i=1;i<=m;i++)
    46         {
    47             scanf("%d %d %d",&a,&b,&t);
    48             if(g[a][b]>t)
    49                 g[a][b]=g[b][a]=t;
    50         }
    51         if(m<n-1)
    52             printf("?
    ");
    53         else
    54         {
    55            prim(n);
    56            if(ans>=inf)
    57                printf("?
    ");
    58            else
    59                printf("%d
    ",ans);
    60         }
    61     }
    62 
    63     return 0;
    64 }
    View Code
    9896382 2013-12-26 16:56:48 Accepted 1863 0MS 296K 989 B C++ 泽泽

    1879

    9896417 2013-12-26 17:03:42 Accepted 1879 234MS 300K 934 B C++ 泽泽
     1 #include<cstdio>
     2 #include<cstring>
     3 #define inf 0xffffff
     4 int g[101][101];
     5 int ans;
     6 void prim(int n)
     7 {
     8     int lowcost[101],used[101],i,j,k,min,closet[101];
     9     memset(used,0,sizeof(used));
    10     for(i=1;i<=n;i++)
    11         lowcost[i]=g[i][1],closet[i]=1;
    12     used[1]=1;
    13     for(i=1;i<n;i++)
    14     {
    15         j=1;
    16         min=inf;
    17         for(k=2;k<=n;k++)
    18         {
    19             if(lowcost[k]<min&&!used[k])
    20                 min=lowcost[k],
    21                 j=k;
    22         }
    23         ans+=g[j][closet[j]];
    24         used[j]=1;
    25         for(k=2;k<=n;k++)
    26         {
    27             if(g[k][j]<lowcost[k]&&!used[k])
    28                 lowcost[k]=g[k][j],
    29                 closet[k]=j;
    30         }
    31     }
    32 
    33 }
    34 int main()
    35 {
    36     int n;
    37     while(scanf("%d",&n)!=EOF&&n)
    38     {
    39         int i,j;
    40         ans=0;
    41         for(i=1;i<=n;i++)
    42             for(j=1;j<=n;j++)
    43                 g[i][j]=inf;
    44         int a,b,t;
    45         for(i=1;i<=n*(n-1)/2;i++)
    46         {
    47             scanf("%d %d %d %d",&a,&b,&t,&j);
    48             if(g[a][b]>t&&j==0)
    49                 g[a][b]=g[b][a]=t;
    50             else if(j==1)
    51                 g[a][b]=g[b][a]=0;
    52         }
    53         prim(n);
    54         printf("%d
    ",ans);
    55     }
    56 
    57     return 0;
    58 }
    View Code
  • 相关阅读:
    任正非:所有公司都是管理第一,技术第二(没有一流管理,领先的技术就会退化;有一流管理,即使技术二流也会进步)
    QuickReport的OnNeedData的触发情况
    Quickreport不用数据字段,如何实现多页打印?
    我要继续做开发吗(对18个问题,全部都是肯定!)
    一台主机,至多可以开启多少个线程
    BenchmarkDotNet
    开发资源
    WebSocket
    TCP
    “在什么时候学习编程才合适?”
  • 原文地址:https://www.cnblogs.com/zeze/p/hdoj1863.html
Copyright © 2011-2022 走看看