zoukankan      html  css  js  c++  java
  • 图算法--kruskal

    kruskal算法的时间复杂度瓶颈在排序上

     1 #include<iostream>
     2 #include<algorithm>
     3 using namespace std;
     4 int n,m;
     5 const int N=1e5+10,M=2e5+10,INF=0x3f3f3f3f;
     6 struct edge{
     7     int a,b,w;
     8     bool operator<(edge t){
     9         return w<t.w;
    10     }
    11 }edges[M];
    12 int p[N];
    13 int find(int x){
    14     if(p[x]!=x){
    15         p[x]=find(p[x]);
    16     }
    17     return p[x];
    18 }
    19 int kruskal(){
    20     sort(edges,edges+m);
    21     for(int i=1;i<=n;i++){
    22         p[i]=i;
    23     }
    24     int res=0,cnt=0;
    25     for(int i=0;i<m;i++){
    26         int pa=find(edges[i].a);
    27         int pb=find(edges[i].b);
    28         if(pa!=pb){
    29             res+=edges[i].w;
    30             p[pa]=pb;//不会有人这里也会写反把
    31             cnt++;
    32         }
    33     }
    34     if(cnt<n-1){
    35         return INF;
    36     }
    37     return res;
    38 }
    39 
    40 int main(void){
    41     cin>>n>>m;
    42     for(int i=0;i<m;i++){
    43         int a,b,w;
    44         cin>>a>>b>>w;
    45         edges[i]={a,b,w};
    46     }
    47     int res=kruskal();
    48     if(res==INF){
    49         cout<<"impossible";
    50     }else{
    51         cout<<res;
    52     }
    53     return 0;
    54 }
  • 相关阅读:
    .net core2.2
    9_山寨系统调用 SystemCallEntry
    7_API调用
    8_InlineHook
    6_再次开中断STI的正确姿势
    5_中断现场下
    4_中断现场中
    3_中断现场上
    2_多核复杂性
    1_中断提权
  • 原文地址:https://www.cnblogs.com/greenofyu/p/14025387.html
Copyright © 2011-2022 走看看