zoukankan      html  css  js  c++  java
  • 2421(并查集)

    #include<iostream>
    #include
    <algorithm>
    using namespace std;

    //int edge[110][110];
    int flag[110];
    int p[110];
    struct node
    {
    int start;
    int end;
    int cost;
    };
    node edge[
    10010];
    int cmp(const node& c,const node& d)
    {
    return c.cost<d.cost;
    }
    int FindSet(int x)
    {
    int temp=p[x];
    if(x!=p[x])
    p[x]
    =FindSet(temp);
    return p[x];
    }
    void Union(int x,int y)
    {
    int A=FindSet(x);
    int B=FindSet(y);
    if(A==B)
    return;
    if(A<B)
    p[B]
    =A;
    else
    p[A]
    =B;
    }
    int main()
    {
    memset(edge,
    0,110*sizeof(edge[0]));
    memset(flag,
    0,110*sizeof(flag[0]));
    int N,Q,start,end,j;
    int sum=0;
    cin
    >>N;
    for(int i=0;i<N;i++)
    p[i]
    =i;
    int k=0;
    for(int i=0;i<N;i++)
    for(int j=0;j<N;j++)
    {
    edge[k].start
    =i;
    edge[k].end
    =j;
    cin
    >>edge[k].cost;
    k
    ++;

    }
    cin
    >>Q;
    for(int i=0;i<Q;i++)
    {
    cin
    >>start>>end;
    //flag[start-1]=flag[end-1]=true;
    Union(start-1,end-1);
    }
    sort(edge,edge
    +N*N,cmp);
    //for(int i=N;i<N*N;i++)
    // cout<<edge[i].cost<<" ";

    for(int i=N;i<N*N;i++)
    {
    //if(!flag[edge[i].start]||!flag[edge[i].end])
    if(FindSet(edge[i].start)!=FindSet(edge[i].end))
    {

    sum
    +=edge[i].cost;
    Union(edge[i].start,edge[i].end);
    flag[edge[i].start]
    =flag[edge[i].end]=true;
    }

    }
    cout
    <<sum<<endl;
    return 0;
    }
  • 相关阅读:
    Spring -- 自定义转换器
    Spring乱码问题解决方案
    Spring 声明式事务
    Spring -- IOC
    Spring--入门
    mybatis 二级缓存
    Mybatis 缓存失效的几种情况
    MyBatis深入浅出--入门
    【RF库Collections测试】Get From Dictionary
    【RF库Collections测试】Get Dictionary Values
  • 原文地址:https://www.cnblogs.com/zhanglanyun/p/2077929.html
Copyright © 2011-2022 走看看