首页 > 其他分享 >Dinic极品优化

Dinic极品优化

时间:2025-01-01 21:40:59浏览次数:6  
标签:极品 const int res -- while && Dinic 优化

#ifdef ONLINE_JUDGE 
#else 
#define Qiu_Cheng 
#endif 
#include <bits/stdc++.h> 
#define int long long 
using namespace std; 
// typedef long long ll; 
const int N=3e5+5,mod=1e9+7,inf=INT_MAX; 
// const int mod1=469762049,mod2=998244353,mod3=1004535809;
// const int G=3,Gi=332748118; 
// const int M=mod1*mod2;
inline int read()
{
    int x=0,f=1;
    char c=getchar();
    while(c<'0'||c>'9'){if(c=='-'){f=-1;}c=getchar();}
    while(c>='0'&&c<='9'){x=(x<<3)+(x<<1)+(c-'0');c=getchar();}
    return x*f;
}
inline void write(int x)
{
    if(x<0){putchar('-');x=-x;}
    if(x>9) write(x/10);
    putchar(x%10+'0');
}
int n,m,S,T;
int dep[N],pos[N];
struct edge
{
    int u,v,w;
};
struct node
{
    int to,c,lp,is;
};
vector<node>g[N];
void add(int from,int to,int c)
{
    g[from].push_back((node){to,c,(int)g[to].size()});
    g[to].push_back((node){from,0,(int)g[from].size()-1});
}
void fc(int s)
{
    for(int i=1;i<=n;i++) dep[i]=-1;
    queue<int>q;
    dep[s]=0;
    q.push(s);
    while(!q.empty())
    {
        int u=q.front();q.pop();
        for(auto v:g[u])
        {
            if(v.c>0&&v.is&&dep[v.to]<0)
            {
                dep[v.to]=dep[u]+1;
                q.push(v.to);
            }
        }
    }
}
int dfs(int u,int t,int f)
{
    if(u==t||!f) return f;
    int ans=0;
    for(int &i=pos[u];i<g[u].size();i++)
    {
        auto &x=g[u][i];
        if(dep[u]+1==dep[x.to]&&x.is&&x.c>0)
        {
            int res=dfs(x.to,t,min(f,x.c));
            if(res>0)
            {
                x.c-=res;g[x.to][x.lp].c+=res;
                f-=res;ans+=res;
                if(!f) break;
            }
        }
    }
    return ans;
}
int max_flow=0;
int dinic(int s,int t)
{
    int flow=0;
    while(1)
    {
        fc(s);
        if(dep[t]==-1) return flow;
        for(int i=1;i<=n;i++) pos[i]=0;
        flow+=dfs(s,t,inf);
    }
}
int frz[N];//存一下from在to中的位置信息
edge a[N]; 
inline void solve()
{
    n=read();m=read();S=read();T=read();
    for(int i=1;i<=m;i++)
    {
        a[i].u=read();a[i].v=read();a[i].w=read();
        // cin>>a[i].u>>a[i].v>>a[i].w;
    }
    for(int i=30;i>=0;i--)
    {
        int p=(1<<i);//分段操作
        for(int j=1;j<=m;j++) 
        {
            if(a[j].w>=p&&a[j].w<(p<<1)) 
            {
                add(a[j].u,a[j].v,a[j].w);
                frz[j]=g[a[j].v].size()-1;
                g[a[j].u][g[a[j].u].size()-1].is=1;//先跑正
            }
        }
        max_flow+=dinic(S,T);
    }
    for(int i=30;i>=0;i--)
    {
        int p=(1<<i);
        for(int j=1;j<=m;j++) 
        {
            if(a[j].w>=p&&a[j].w<(p<<1)) 
            {
                g[a[j].v][frz[j]].is=1;//再跑反
            }
        }
        max_flow+=dinic(S,T);
    }
    write(max_flow);
}
signed main() 
{ 
#ifdef Qiu_Cheng 
    freopen("1.in","r",stdin); 
    freopen("1.out","w",stdout); 
#endif 
    // ios::sync_with_stdio(false); 
    // cin.tie(0); cout.tie(0); 
    // int QwQ; 
    // cin>>QwQ; 
    // while(QwQ--)solve(); 
    solve(); 
    return 0; 
}
//12 825076913 0 173167432
//  6666   66666  666666 
// 6    6  6   6      6 
// 6    6  6666      6 
// 6    6  6  6    6 
//  6666   6   6  6666666

//g++ -O2 -std=c++14 -Wall "-Wl,--stack= 536870912 " cao.cpp -o cao.exe

标签:极品,const,int,res,--,while,&&,Dinic,优化
From: https://www.cnblogs.com/qc0817/p/18646334

相关文章

  • 探索基于WebAssembly的下一代前端性能优化方案
    近年来,随着用户需求的不断增长,Web应用的性能和响应速度受到越来越高的要求。在前端领域,JavaScript一直是Web开发的核心语言。然而,JavaScript在高性能场景中可能会遇到瓶颈,比如图像处理、大规模计算和实时交互应用等。为了解决这些问题,WebAssembly(WASM)应运而生,它为前端开发提供......
  • 开源架构的微服务架构实践优化版
    上两篇文章推荐:开源架构中的数据库选择优化版(New)开源架构学习指南:文档与资源的智慧锦囊(New)我管理的社区推荐:【青云交社区】和【架构师社区】推荐技术圈福利社群:点击快速加入开源架构的微服务架构实践优化版一、引言二、微服务架构基础剖析:深挖根基,洞见本......
  • React 19 深度剖析:从架构升级到性能优化
    React19深度剖析:从架构升级到性能优化目录React19架构升级新特性深度解析性能优化最佳实践高级功能应用工程化实践迁移策略实战案例常见问题解决1.React19架构升级1.1新一代并发渲染引擎React19采用全新的并发渲染架构,显著提升了应用性能://新的并发模式配......
  • 基于广告观看的积分兑换系统实现与优化
    本文介绍了一种基于广告观看的积分兑换系统,其核心理念与用户通过观看广告内容获取积分,进而将积分兑换为现金的机制相似,类似于国内某知名短视频平台的广告收益模式。该系统旨在探索一种非传统收益获取途径,通过技术手段实现自动化、高效化的广告观看与积分累积过程。一、系统......
  • 【文档详细讲解+代码】鲁棒优化、广义benders分解法、KKT+两层优化+、两阶段鲁棒优化
     ......
  • 基于双层共识控制的直流微电网优化调度(Matlab代码实现)
     ......
  • Vue项目整合与优化
    前几篇文章,我们讲述了Vue项目构建的整体流程,从无到有的实现了单页和多页应用的功能配置,但在实现的过程中不乏一些可以整合的功能点及可行性的优化方案,就像大楼造完需要进行最后的项目验收改进一样,有待我们进一步的去完善。使用alias简化路径使用webpack构建过Vue项......
  • 优化大肠杆菌菌株和发酵工艺以提高L-赖氨酸生产-文献精读94
    OptimizingEscherichiacolistrainsandfermentationprocessesforenhancedL-lysineproduction:areview优化大肠杆菌菌株和发酵工艺以提高L-赖氨酸生产:综述对比酵母酵母中denovo生物合成啤酒花活性类黄酮黄腐醇-文献精读93-CSDN博客赖氨酸是一种重要的必需氨基酸......
  • Java 虚拟机(JVM)深度剖析:原理、优化与实践探索
    在当今的软件开发领域,Java语言凭借其“一次编写,到处运行”的特性,占据着举足轻重的地位。而Java虚拟机(JavaVirtualMachine,JVM)作为Java程序运行的核心基础设施,负责加载、执行和管理Java字节码,其性能和稳定性直接影响着Java应用的质量和效率。深入研究JVM,对于优化J......
  • 做性能优化时你是如何定位问题的?
    在前端开发中进行性能优化时,定位问题是一个关键步骤。以下是我通常遵循的步骤和使用的工具来定位性能问题:明确性能目标:首先,明确你的性能目标。这可能是页面加载时间、渲染时间、交互响应时间等。有了明确的目标,你就能更准确地衡量和定位问题。使用浏览器的开发者工具:Chro......