惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

L
LangChain Blog
V
V2EX
爱范儿
爱范儿
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
Martin Fowler
Martin Fowler
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
Apple Machine Learning Research
Apple Machine Learning Research
WordPress大学
WordPress大学
有赞技术团队
有赞技术团队
宝玉的分享
宝玉的分享
Last Week in AI
Last Week in AI
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
罗磊的独立博客
小众软件
小众软件
Vercel News
Vercel News
博客园 - 司徒正美
阮一峰的网络日志
阮一峰的网络日志
V
Visual Studio Blog
J
Java Code Geeks
P
Proofpoint News Feed
MongoDB | Blog
MongoDB | Blog
B
Blog
美团技术团队
量子位

某岛

AtCoder Beginner Contest 409 Luogu P5325. 【模板】Min_25 筛 UOJ #188. 【UR #13】Sanrd AtCoder Beginner Contest 371 AtCoder Beginner Contest 369 RPGMaker 2k3 百科 OneShot 的考古 2024“开创拓芯”游戏创享节的相关记录 CJ 回来后的戒断反应 Luogu P10221. [省选联考 2024] 重塑时光 Luogu P5308 [COCI2018-2019#4] Akvizna wqs 二分 歌唱王国 Lean 相关 BZOJ 3153. Sone1 The 2023 ICPC World Finals Luxor 新巴别塔 Sora 的想象与思考 Facebook Hacker Cup 2023 Round 1 AtCoder Beginner Contest 322 LLaMA 2 相关 HuggingFace AI Game Jam ACL 2023 Trans 相关… Luogu P2053. [SCOI2007] 修车 Luogu P1973. [NOI2011] NOI 嘉年华 Luogu P1933. [NOI2010] 旅行路线 Luogu P1954. [NOI2010] 航空管制 Luogu P2048. [NOI2010] 超级钢琴 Luogu P2046. [NOI2010] 海拔
BZOJ 3118. Orz the MST
2022-07-05 · via 某岛

July 5, 2022

小心重边。


const int N = 300 + 9, M = int(1e3) + 9;

struct Tree {
    VI adj[N]; int fa[N], dep[N];

    void dfs(int u = 1, int p = -1) {
        for (auto v: adj[u]) if (v != p) {
            fa[v] = u; dep[v] = dep[u] + 1;
            dfs(v, u);
        }
    }
} T;

struct Graph {
    int id[N][N];

    struct edge {
        int x, y, w, inT, c;
        void in(int i) {
            int a, b; RD(x, y, w, inT, a, b);
            c = inT ? b : a;
        }
    } E[M];

    int n, m;

    void in() {
        RD(n, m); REP_1(i, m) {
            E[i].in(i);
            if (E[i].inT) {
                int x = E[i].x, y = E[i].y;
                T.adj[x].PB(y); T.adj[y].PB(x);
                id[x][y] = id[y][x] = i;
            }
        }
        T.dfs();
    }
} G;


struct Simplex {
    const static int N = ::M, M = int(1e4) + 9;
    DB a[N+1][M+1];
    int n, m;

    void pivot(int in, int out) {
        REP(i, m+1) if(i!=in) a[out][i] /= -a[out][in]; //重置out约束
        a[out][in] = 1/a[out][in];

        REP(i, n+1) if (i!=out && sgn(a[i][in])) { //重新计算其他约束
            DB t = a[i][in]; a[i][in] = 0;
            REP(j, m+1) a[i][j] += t*a[out][j];
        }
    }

    DB run() {
        while (true) {
            int in=0, out=0; DB Min=OO;
            REP_1(i, m) if(sgn(a[0][i])>0) {
                in=i;
                break;
            }
            if(!in)return a[0][0];
            REP_1(i, n) if(sgn(a[i][in])<0&&a[i][0]/-a[i][in]<Min) {
                Min=a[i][0]/-a[i][in];
                out=i;
            }
            if(!out)throw; //unbounded
            pivot(in, out);
        }
    }

    int gao() {

        // z b
        // c A

        G.in();
        n = G.m; m = 0; REP_1(i, n) {
            a[i][0] = G.E[i].c;
            int u = G.E[i].x, v = G.E[i].y;
            if (T.dep[u] < T.dep[v]) swap(u, v);
            if (!G.E[i].inT) { // E[i] is not a tree edge
                while (u != v) {
                    int p = T.fa[u];
                    int j = G.id[p][u]; // E[j] is a tree edge
                    if (G.E[i].w < G.E[j].w) {
                        ++m; a[i][m] = a[j][m] = -1;
                        a[0][m] = G.E[j].w - G.E[i].w;
                    }
                    u = p; if (T.dep[u] < T.dep[v]) swap(u, v);
                }
            }
        }

        return run();
    }
} fst;


int main() {

#ifndef ONLINE_JUDGE
    freopen("in.txt", "r", stdin);
    //freopen("out.txt", "w", stdout);
#endif
    OT(fst.gao());
}

Posted by xiaodao
Category: 日常