zoukankan      html  css  js  c++  java
  • POJ 1751 Highways

    题意:n个城市,然后把n个城市的坐标都给你,然后给你m条已经修好的道路,然后给出m个已经修好道路的城市a,b,

    However, they want to guarantee that every town is highway-reachable from every other town.

    他们保证任何城市都是可以通过其他城市到达的

    很明显是个最小生成树问题、

    最后让你输出所有需要另外加的道路连接的两个城市a b、

    思路:先对所有n个城市求一遍距离、然后对已经修好道路的城市赋值为0、输出的时候要使用一下前驱数组(用来记录一个点的前驱是哪一个点)

     1 #include<cmath>
     2 #include<cstdio>
     3 #include<cstring>
     4 #include<algorithm>
     5 using namespace std;
     6 const int qq=800;
     7 const int MAX=1e8;
     8 int n,m,sum;
     9 int map[qq][qq];
    10 int cost[qq+300];
    11 int vis[qq];
    12 int pre[qq];
    13 int x[qq],y[qq];
    14 void prim()
    15 {
    16     memset(vis,0,sizeof(vis));
    17     for(int i=1;i<=n;++i){
    18         cost[i]=map[1][i];
    19         pre[i]=1;            //初始化前驱、因为刚开始加的1,所以将每一个点的前驱设置为1 
    20     }        
    21     vis[1]=1;
    22     int minx,k;
    23     for(int i=1;i<=n;++i){
    24         minx=MAX;
    25         for(int j=1;j<=n;++j)
    26             if(!vis[j] && cost[j]<minx)
    27                 minx=cost[k=j];
    28         if(map[pre[k]][k])    printf("%d %d
    ",pre[k],k);    //当道路不存在时,输出前驱、 
    29         vis[k]=1;
    30         for(int j=1;j<=n;++j)
    31             if(map[k][j]<cost[j]){
    32                 cost[j]=map[k][j];
    33                 pre[j]=k;        //更新前驱、 
    34             }    
    35     }
    36 }
    37 int main()
    38 {
    39     scanf("%d",&n);
    40     int i,j,a,b;
    41     for(i=1;i<=n;++i){
    42         scanf("%d%d",&x[i],&y[i]);
    43         for(j=1;j<i;++j){
    44             if(i==j)    map[i][j]=MAX;
    45             else        map[i][j]=map[j][i]=(x[i]-x[j])*(x[i]-x[j])+(y[i]-y[j])*(y[i]-y[j]);
    46         }
    47     }
    48     scanf("%d",&m);
    49     for(i=1;i<=m;++i){
    50         scanf("%d%d",&a,&b);
    51         map[a][b]=map[b][a]=0;
    52     }
    53     prim();    
    54     return 0;
    55 }

  • 相关阅读:
    HDU 3681 Prison Break 越狱(状压DP,变形)
    POJ 2411 Mondriaan's Dream (状压DP,骨牌覆盖,经典)
    ZOJ 3471 Most Powerful (状压DP,经典)
    POJ 2288 Islands and Bridges (状压DP,变形)
    HDU 3001 Travelling (状压DP,3进制)
    POJ 3311 Hie with the Pie (状压DP)
    POJ 1185 炮兵阵地 (状压DP,轮廓线DP)
    FZU 2204 7
    POJ 3254 Corn Fields (状压DP,轮廓线DP)
    ZOJ 3494 BCD Code (数位DP,AC自动机)
  • 原文地址:https://www.cnblogs.com/sasuke-/p/5453283.html
Copyright © 2011-2022 走看看