NC20951(网络优化 )

感受

思路





图片说明

#include <bits/stdc++.h>
#define ls o << 1
#define rs o << 1 | 1
using namespace std;
typedef long long ll;
const int maxn = 3e4 + 10;
const int maxm = 2e6 + 10;
const int inf = 1e9;
int dfn;
int T[maxn << 2];
struct MaxFlow{
    int head[maxn], dep[maxn], que[maxn];///(L, R] 先进先出
    int cnt, s, t, n, L, R;
    struct edge{
        int v, nex; ll w;
    }e[maxm];
    void Init(){
        cnt = 0;
        memset(head, -1, sizeof(head));
    }
    void init(int _s, int _t){
         s = _s; t = _t; n = t + 1;

    }
    void add(int u, int v, ll w){
        e[cnt] = (edge){v, head[u], w}; head[u] = cnt++;
        e[cnt] = (edge){u, head[v], 0}; head[v] = cnt++;
    }
    inline bool bfs(){
        for(int i = 0; i <= n; i++) dep[i] = 0;
        que[dep[s] = R = 1] = s; L = 0;
        while(L < R){
            int u =que[++L], v;
            for(int i = head[u]; ~i; i = e[i].nex){
                v = e[i].v;
                if(e[i].w > 0 && !dep[v]){
                    dep[v] = dep[u] + 1; que[++R] = v;
                    if(v == t) return true;
                }
            }
        }
        return false;
    }
    ll dfs(int u, ll nf){
        if(u == t) return nf;
        ll res = 0;
        int v;
        for(int i = head[u]; nf && ~i; i = e[i].nex){
            v = e[i].v;
            if(dep[v] != dep[u] + 1 || !e[i].w) continue;
            ll tf = dfs(v, min(nf, e[i].w));
            res += tf; nf -= tf;
            e[i].w -= tf; e[i ^ 1].w += tf;
        }
        if(!nf) dep[u] = 0;
        return res;
    }///走到u处时, 流向u的最大流量和    res表示实际可以流向u的流量和(保证子节点可以流通)
    ll run(){
        ll flow = 0;
        while(bfs()){
            flow += dfs(s, inf);
        }
        return flow;
    }
}MF;
void build(int o, int l, int r){
    T[o] = ++dfn;
    if(l == r){
        MF.add(0, T[o], 1);
        return ;
    }
    int mid = (l + r) / 2;
    build(ls, l, mid);
    build(rs, mid + 1, r);
    MF.add(T[ls], T[o], mid - l + 1);
    MF.add(T[rs], T[o], r - mid);
}
void update(int o, int l, int r, int x, int y, int v){
    if(l >= x && y >= r){
        MF.add(T[o], v, r - l + 1);
        return ;
    }
    int mid = (l + r) / 2;
    if(mid >= x) update(ls, l, mid, x, y, v);
    if(y > mid) update(rs, mid + 1, r, x, y, v);
}
int main(){
    int n, m;
    while(scanf("%d%d", &n, &m) != EOF){
        MF.Init();
        dfn = 0;
        build(1, 1, n);
        MF.init(0, dfn + m + 1);
        int l, r, v;
        for(int i = 1; i <= m; i++){
            scanf("%d%d%d", &l, &r, &v);
            update(1, 1, n, l, r, dfn + i);
            MF.add(dfn + i, MF.t, v);
        }
        printf("%d\n", MF.run());
    }
    return 0;
}
全部评论

相关推荐

03-06 20:09
贵州大学 Java
King987:你这个学历找个中大厂刷实习经历都是可以的,但是项目要有亮点才行,这个什么外卖就不要做了,去找找最新的项目,至少涉及高并发或者是新型的AI技术mcp rag啥的 ,我在出简历点评,但是你这个没什么好点评的,内容太少,而且含金量太低。自己改一改吧,或者看一下我的项目地址中,那里有大厂最近做过的实习项目
点赞 评论 收藏
分享
01-30 09:45
燕山大学 Java
喵_coding:这种直接跑就完事了 哪有毕业了才签合同 任何offer和三方都没有的
点赞 评论 收藏
分享
评论
1
收藏
分享

创作者周榜

更多
正在热议
更多
# 长得好看会提高面试通过率吗? #
3288次浏览 43人参与
# HR最不可信的一句话是__ #
1035次浏览 32人参与
# 米连集团26产品管培生项目 #
7134次浏览 224人参与
# 春招至今,你的战绩如何? #
15022次浏览 140人参与
# AI面会问哪些问题? #
905次浏览 22人参与
# 你的实习产出是真实的还是包装的? #
2763次浏览 52人参与
# 巨人网络春招 #
11493次浏览 224人参与
# 沪漂/北漂你觉得哪个更苦? #
1322次浏览 40人参与
# 你做过最难的笔试是哪家公司 #
1152次浏览 20人参与
# AI时代,哪个岗位还有“活路” #
2715次浏览 50人参与
# XX请雇我工作 #
51149次浏览 171人参与
# 军工所铁饭碗 vs 互联网高薪资,你会选谁 #
7971次浏览 43人参与
# 简历第一个项目做什么 #
32089次浏览 359人参与
# 简历中的项目经历要怎么写? #
310939次浏览 4260人参与
# 不考虑薪资和职业,你最想做什么工作呢? #
152851次浏览 889人参与
# 当下环境,你会继续卷互联网,还是看其他行业机会 #
187561次浏览 1123人参与
# AI时代,哪些岗位最容易被淘汰 #
64564次浏览 866人参与
# 如果重来一次你还会读研吗 #
229978次浏览 2011人参与
# 投格力的你,拿到offer了吗? #
178279次浏览 891人参与
# 你怎么看待AI面试 #
180682次浏览 1298人参与
# 正在春招的你,也参与了去年秋招吗? #
364223次浏览 2641人参与
# 腾讯音乐求职进展汇总 #
160826次浏览 1114人参与
牛客网
牛客网在线编程
牛客网题解
牛客企业服务