• BZOJ1601: [Usaco2008 Oct]灌水


    最小生成树

    #include<cstdio>
    #include<cstdlib>
    #include<algorithm>
    #include<cstring>
    #define pb push_back
    #define MAXN 300+10
    using namespace std;
    struct Edge{
        int from,to,cost;
        Edge(int x=0,int y=0,int c=0){
            from=x,to=y,cost=c;
        }
        friend bool operator < (const Edge &p1,const Edge &p2){
            return (p1.cost<p2.cost);
        }
    };
    vector<Edge> vs;
    int n;
    int f[MAXN];
    int find(int x){
        return (f[x]==x?x:f[x]=find(f[x]));
    }    
    void lik(int x,int y){
        x=find(x),y=find(y);
        if(x!=y){
            f[x]=y;
        }
    }
    bool same(int x,int y){
        return (find(x)==find(y));
    }
    void init(){
        scanf("%d",&n);
        for(int i=1;i<=n;i++){
            int v;scanf("%d",&v);
            vs.pb(Edge(0,i,v));
        }
        for(int i=1;i<=n;i++){
            for(int j=1;j<=n;j++){
                int v;scanf("%d",&v);
                if(i<=j)continue;
                vs.push_back(Edge(i,j,v));
            }
        }
        for(int i=1;i<=n;i++){
            f[i]=i;
        }
    }
    void solve(){
        sort(vs.begin(),vs.end());
        int ans=0;
        for(int i=0;i<vs.size();i++){
            int x=vs[i].from,y=vs[i].to,c=vs[i].cost;
            if(!same(x,y)){
                lik(x,y);
                ans+=c;
            }
        }
        printf("%d
    ",ans);
    }
    int main()
    {
        init();
        solve();
        return 0;
    }    
  • 相关阅读:
    axios 封装
    Git 常用命令行
    React Native 开发环境搭建
    React Native 组件分类
    日期插件rolldate.js的使用
    单图片上传
    使用css完成物流进度的样式
    搜索过滤 以及排序
    v-for的使用方法
    v-if 和v-show 用法
  • 原文地址:https://www.cnblogs.com/w-h-h/p/8065095.html
Copyright © 2020-2023  润新知