zoukankan      html  css  js  c++  java
  • [模板]Kruskal && 并查集 洛谷T3366、3367

    【一年之后重新学习】系列第二弹。。。

    Kruskal:

     1 #include<cstdio>
     2 #include<iostream>
     3 #include<cstring>
     4 #include<cmath>
     5 #include<ctime>
     6 #include<cstdlib>
     7 
     8 #include<string>
     9 #include<stack>
    10 #include<queue>
    11 #include<vector>
    12 #include<algorithm>
    13 #include<map>
    14 #include<set>
    15 
    16 using namespace std;
    17 
    18 inline void read(int &x){
    19     x=0;
    20     char t=getchar();
    21     bool f=0;
    22     
    23     while(t<'0' || t>'9'){
    24         if(t=='-')f=1;
    25         t=getchar();
    26     }
    27     
    28     while(t>='0' && t<='9'){
    29         x=(x<<3)+(x<<1)+t-'0';
    30         t=getchar();
    31     }
    32     
    33     if(f)x=-x;
    34 }
    35 
    36 void start();
    37 int find(int);
    38 
    39 int pa[5010];
    40 
    41 int u[200010];
    42 int v[200010];
    43 int w[200010];
    44 int first[5010];
    45 int next[200010];
    46 
    47 int p[200010];
    48 
    49 bool cmp(int a,int b){
    50     return w[a]<w[b];
    51 }
    52 
    53 int n,m,i;
    54 int js=0;
    55 int x,y;
    56 int ans=0;
    57 
    58 int main(){
    59     start();
    60     
    61     read(n);read(m);
    62     
    63     for(i=1;i<=n;i++)pa[i]=i;
    64     
    65     for(i=1;i<=m;i++){
    66         read(u[i]);read(v[i]);read(w[i]);
    67         next[i]=first[u[i]];
    68         first[u[i]]=i;
    69         
    70         p[i]=i;
    71     }
    72     
    73     sort(p+1,p+1+m,cmp);
    74     
    75     for(i=1;i<=m && js<n-1;i++){
    76         x=find(u[p[i]]);
    77         y=find(v[p[i]]);
    78         
    79         if(x!=y){
    80             js++;
    81             ans+=w[p[i]];
    82             pa[x]=y;
    83         }
    84     }
    85     
    86     if(js==n-1)printf("%d
    ",ans);else printf("orz
    ");
    87     
    88     return 0;
    89 }
    90 
    91 void start(){
    92     memset(first,0,sizeof(first));
    93     memset(next,0,sizeof(next));
    94 }
    95 
    96 int find(int x){
    97     if(pa[x]==x)return x;
    98     else return pa[x]=find(pa[x]);
    99 }

    并查集:

     1 #include<cstdio>
     2 #include<iostream>
     3 #include<cstring>
     4 #include<cmath>
     5 #include<ctime>
     6 #include<cstdlib>
     7 
     8 #include<string>
     9 #include<stack>
    10 #include<queue>
    11 #include<vector>
    12 #include<algorithm>
    13 #include<map>
    14 #include<set>
    15 
    16 using namespace std;
    17 
    18 inline void read(int &x){
    19     x=0;
    20     char t=getchar();
    21     bool f=0;
    22     
    23     while(t<'0' || t>'9'){
    24         if(t=='-')f=1;
    25         t=getchar();
    26     }
    27     
    28     while(t>='0' && t<='9'){
    29         x=(x<<3)+(x<<1)+t-'0';
    30         t=getchar();
    31     }
    32     
    33     if(f)x=-x;
    34 }
    35 
    36 int find(int);
    37 
    38 int pa[10010];
    39 int n,m,i,f,a,b,x,y;
    40 
    41 int main(){
    42     read(n);read(m);
    43     
    44     for(i=1;i<=n;i++)pa[i]=i;
    45     for(i=1;i<=m;i++){
    46         read(f);read(a);read(b);
    47         x=find(a);y=find(b);
    48         if(f==1)pa[x]=y;
    49         else{
    50             if(x==y)printf("Y
    ");
    51             else printf("N
    ");
    52         }
    53     }
    54     
    55     return 0;
    56 }
    57 
    58 int find(int x){
    59     if(pa[x]==x)return x;
    60     else return pa[x]=find(pa[x]);
    61 }
  • 相关阅读:
    jquery扩展鼠标mousewheel事件
    addEventListener和attachEvent介绍, 原生js和jquery的兼容性写法
    HTML,CSS,font-family:中文字体的英文名称
    最好的Java和Android开发IDE---IntelliJ IDEA使用技巧
    《Thinking in Java》习题——吸血鬼数字
    Java学习之——JavaBeans
    Android 开源库——侧滑菜单栏(SlidingMenu)的导入和使用
    Android 布局学习之——Layout(布局)详解二(常见布局和布局参数)
    Android 布局学习之——Layout(布局)详解一
    Android 布局学习之——LinearLayout的layout_weight属性
  • 原文地址:https://www.cnblogs.com/running-coder-wfh/p/7517647.html
Copyright © 2011-2022 走看看