zoukankan      html  css  js  c++  java
  • 最小树形图

    /// D-MST
    struct Edge
    {
        int u,v,w;
    };Edge e[maxn];int en;
    int in[25100];
    int pre[25100],ID[25100],vis[25100];
    
    /// D-MST 点的标号必须是0~N-1,不能改为0~N或1~N
    int D_MST(int rt,int n,int m)
    {
        int res=0;
        while(1){
            REP(i,0,n-1) in[i]=INF;
            REP(i,1,m){
                int u=e[i].u,v=e[i].v,w=e[i].w;
                if(w<in[v]&&u!=v){
                    pre[v]=u;
                    in[v]=w;
                }
            }
            REP(i,0,n-1){
                if(i==rt) continue;
                if(in[i]==INF) return -1;
            }
            int cntnode=0;
            memset(ID,-1,sizeof(ID));
            memset(vis,-1,sizeof(vis));
            in[rt]=0;
            REP(i,0,n-1){
                res+=in[i];
                int v=i;
                while(vis[v]!=i&&ID[v]==-1&&v!=rt){
                    vis[v]=i;
                    v=pre[v];
                }
                if(v!=rt&&ID[v]==-1){
                    for(int u=pre[v];u!=v;u=pre[u]) ID[u]=cntnode;
                    ID[v]=cntnode++;
                }
            }
            if(cntnode==0) break;
            REP(i,0,n-1) if(ID[i]==-1) ID[i]=cntnode++;
            REP(i,1,m){
                int v=e[i].v;
                e[i].u=ID[e[i].u];
                e[i].v=ID[e[i].v];
                if(e[i].u!=e[i].v) e[i].w-=in[v];
            }
            n=cntnode;
            rt=ID[rt];
        }
        return res;
    }
    View Code
    没有AC不了的题,只有不努力的ACMER!
  • 相关阅读:
    MathML
    Redux counterpart rematch dva
    flow
    pauseable 库
    a simple machine learning system demo, for ML study.
    react图工具集成
    SQLite
    Celery
    RabbitMQ installation
    Thunk
  • 原文地址:https://www.cnblogs.com/--560/p/5354530.html
Copyright © 2011-2022 走看看