• BZOJ 3060 Kruskal


    思路:

    把from&to都>k的直接加边

    剩下的如果是一棵树就加. 

    否则ans++

    (我的代码写的是反着的 不过意思都一样)

    //By SiriusRen
    #include <cstdio>
    using namespace std;
    #define N 2000005
    int n,m,k,f[N],cnt;
    struct Node{int from,to;}node[N];
    int find(int x){return x==f[x]?x:f[x]=find(f[x]);}
    int main(){
        scanf("%d%d%d",&n,&m,&k);
        for(int i=1;i<=m;i++)scanf("%d%d",&node[i].from,&node[i].to);
        for(int i=1;i<=n;i++)f[i]=i;
        for(int i=1;i<=m;i++){
            if(node[i].from>k&&node[i].to>k){
                int fx=find(node[i].from),fy=find(node[i].to);
                if(fx!=fy)f[fx]=fy;
                cnt++;
            }
        }
        for(int i=1;i<=m;i++){
            if(node[i].from<=k||node[i].to<=k){
                int fx=find(node[i].from),fy=find(node[i].to);
                if(fx!=fy)f[fx]=fy,cnt++;
            }
        }printf("%d
    ",m-cnt);
    }
  • 相关阅读:
    设计模式-代理模式
    设计模式-策略模式
    设计模式-单例模式
    优先队列
    n!中质因子个数
    计算组合数
    高精度
    memset用法
    质因子分解
    素数筛法
  • 原文地址:https://www.cnblogs.com/SiriusRen/p/6532825.html
Copyright © 2020-2023  润新知