• __周赛(最小生成树(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 }
  • 相关阅读:
    [转]HBASE 二级索引
    EPOCH, BATCH, INTERATION
    AMAZON数据集
    模拟ajax实现网络爬虫——HtmlUnit
    MySQL 数据库 varchar 到底可以存多少个汉字,多少个英文呢?我们来搞搞清楚
    maven: 打包可运行的jar包(java application)及依赖项处理
    webdriver 执行完毕关闭chromedriver进程
    windows下批量杀死进程
    系统进程死锁是什么原因如何让进程不死锁
    Data source rejected establishment of connection, message from server: "Too many connections"
  • 原文地址:https://www.cnblogs.com/lovelystone/p/4512966.html
Copyright © 2020-2023  润新知