zoukankan      html  css  js  c++  java
  • __周赛(最小生成树(Prime))

    将已经链接的边的权值设为0即可。

    但是可能会超时,提交的时候,有一次显示超时,所以这个解法是有问题的,看到有171ms的,实力差的太大了,还是得使劲刷题。

    /*2015-5-18 951ms*/
    #include<stdio.h> #include<string.h> #include<algorithm> using namespace std; #define INF 0x3f3f3f3f int map[510][510],p[510],n; int prime(){ int visit[510]; int less[510]; int nodes,sum; sum = 0;nodes = 1; memset(visit,0,sizeof(visit)); visit [1] = 1; for(int i = 1;i<=n;i++){ less[i] = map[1][i]; } int temp,k; for(int i = 1;i<=n;i++){ temp = INF; for(int j = 1;j<=n;j++){ if(!visit[j] && temp > less[j]) temp = less[k=j]; } if(temp == INF)break; nodes++; sum += less[k]; visit[k] = 1; for(int j = 1;j<=n;j++){ if(!visit[j] && less[j] > map[k][j]) less[j] = map[k][j]; } } // printf("%d ",nodes); if(nodes == n)return sum; else return -1; } int main() { int t ; scanf("%d",&t); while(t--){ int m,k; memset(map,INF,sizeof(map)); scanf("%d%d%d",&n,&m,&k); for(int i = 0;i<m;i++){ int a,b,c; scanf("%d%d%d",&a,&b,&c); map[a][b] = map[b][a] = min(map[a][b],c); } for(int i = 0;i<k;i++){ int d; scanf("%d",&d); int x[510]; for(int j =0;j<d;j++){ scanf("%d",&x[j]); } for(int j = 0;j<d-1;j++) for(int jj = j+1;jj<d;jj++) map[x[j]][x[jj]] = map[x[jj]][x[j]] = 0; } printf("%d ",prime()); } }
      1 /*这个代码还是比较给力的,这个是利用了Prime算法的特点,将连起来的点构成链,2015-5-18 717ms*/
      2 #include<stdio.h>
      3 #include<string.h>
      4 #include<algorithm>
      5 using namespace std;
      6 
      7 #define INF 0x3f3f3f3f
      8 
      9 int map[510][510],p[510],n;
     10 
     11 
     12 int prime(){
     13     
     14     int visit[510];
     15     int less[510];
     16     
     17     int nodes,sum;
     18     
     19     sum = 0;nodes = 1;
     20     
     21     memset(visit,0,sizeof(visit));
     22     
     23     visit [1] = 1;
     24     
     25     for(int i = 1;i<=n;i++){
     26         
     27         less[i] = map[1][i];
     28     }
     29     int temp,k;
     30     for(int i = 1;i<=n;i++){
     31     
     32         temp = INF;
     33         for(int j = 1;j<=n;j++){
     34             if(!visit[j] && temp > less[j])
     35                 temp = less[k=j];
     36         }
     37         if(temp == INF)break;
     38         nodes++;
     39         sum  += less[k];
     40         
     41         visit[k] = 1;
     42         
     43         for(int j = 1;j<=n;j++){
     44             if(!visit[j] && less[j] > map[k][j])
     45                 less[j] = map[k][j];
     46         }
     47         
     48     }
     49 //    printf("%d
    ",nodes);
     50     if(nodes == n)return sum;
     51     else return -1; 
     52     
     53 }
     54 
     55 
     56 int main() {
     57     
     58     int t ;
     59     
     60     scanf("%d",&t);
     61     
     62     while(t--){
     63         
     64         int m,k;
     65         
     66         memset(map,INF,sizeof(map));
     67         
     68         scanf("%d%d%d",&n,&m,&k);
     69         
     70         for(int i = 0;i<m;i++){
     71             
     72             int a,b,c;
     73             
     74             scanf("%d%d%d",&a,&b,&c);
     75             
     76             map[a][b] = map[b][a] = min(map[a][b],c);
     77             
     78         }
     79         for(int i = 0;i<k;i++){
     80             int d;
     81             
     82             scanf("%d",&d);
     83             
     84             int x,last;
     85             
     86             scanf("%d",&last);
     87             for(int j =2;j<=d;j++){
     88                 
     89                 scanf("%d",&x);
     90                 map[x][last] = map[last][x] = 0;
     91                 last = x;
     92             }
     93             
     94         }
     95         printf("%d
    ",prime());
     96         
     97     }
     98     
     99     
    100     
    101 }
  • 相关阅读:
    PHP学习笔记二十八【抽象类】
    PHP学习笔记二十七【重写】
    PHP学习笔记二十六【类的重载】
    PHP学习笔记二十五【类的继承】
    BZOJ4001[TJOI2015]概率论(数学、期望、生成函数、卡特兰数)
    BZOJ5091摘苹果(概率、期望)
    [Codeforces1009E]Intercity Travelling 数学题
    ZJOI2009狼和羊的故事
    洛谷P2050[NOI2012]美食节(网络流+动态加边优化)
    apk编辑器制作共存失败的一个可能的原因(第一次手动制作的教训)
  • 原文地址:https://www.cnblogs.com/lovelystone/p/4512966.html
Copyright © 2011-2022 走看看