poj 3469 Dual Core CPU 最大流建图思想 dinic 弧优化很重要

2024-01-13 02:48

本文主要是介绍poj 3469 Dual Core CPU 最大流建图思想 dinic 弧优化很重要,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

http://poj.org/problem?id=3469
题意:给你n个物品,放在集合a中会有一定的花费,放在集合B中也有一定的花费,其中还有m对物体
当这m对物体放在同一个集合中不会产生额外的花费,否则会产生额外的花费,问最后最小的花费
   
  • #include <iostream>
    #include <cstdio>
    #include <cstring>
    #include <cstdlib>
    #include <cmath>
    #include <vector>
    #include <queue>
    #include <map>
    #include <algorithm>
    #include <set>
    using namespace std;
    #define MM(a) memset(a,0,sizeof(a))
    typedef long long ll;
    typedef unsigned long long ULL;
    const int mod = 1000000007;
    const double eps = 1e-10;
    const int inf = 0x3f3f3f3f;
    const int big=50000;
    int max(int a,int b) {return a>b?a:b;};
    int min(int a,int b) {return a<b?a:b;};
    struct edge{
    int to,cap,rev;
    };
    vector<edge> G[240005];
    int level[20005],iter[20005];
    void add_edge(int u,int v,int cost)
    {
    G[u].push_back(edge{v,cost,G[v].size()});
    G[v].push_back(edge{u,0,G[u].size()-1});
    }
    void bfs(int s)
    {
    queue<int> q;
    q.push(s);
    level[s]=1;
    while(q.size())
    {
    int now=q.front();q.pop();
    for(int i=0;i<G[now].size();i++)
    if(G[now][i].cap>0)
    {
    edge e=G[now][i];
    if(level[e.to]<0)
    {
    level[e.to]=level[now]+1;
    q.push(e.to);
    }
    }
    }
    }
    int dfs(int s,int t,int minn)
    {
    if(s==t)
    return minn;
    for(int &i=iter[s];i<G[s].size();i++)
    {
    edge &e=G[s][i];
    if(level[e.to]>level[s]&&e.cap>0)
    {
    int k=dfs(e.to,t,min(minn,e.cap));
    if(k>0)
    {
    e.cap-=k;
    G[e.to][e.rev].cap+=k;
    return k;
    }
    }
    }
    return 0;
    }
    int max_flow(int s,int t)
    {
    int ans=0,temp;
    for(;;)
    {
    memset(level,-1,sizeof(level));
    bfs(s);
    if(level[t]<0)
    return ans;
    memset(iter,0,sizeof(iter));
    while((temp=dfs(s,t,inf))>0)
    ans+=temp;
    }
    }
    int main()
    {
    int n,m,s,t;
    while(~scanf("%d %d",&n,&m))
    {
    for(int i=1;i<=n;i++)
    {
    scanf("%d %d",&s,&t);
    add_edge(0,i,t);
    add_edge(i,n+1,s);
    }
    for(int j=1;j<=m;j++)
    {
    int x,y,c;
    scanf("%d %d %d",&x,&y,&c);
    add_edge(x,y,c);
    add_edge(y,x,c);
    }
    printf("%d\n",max_flow(0,n+1));
    }
    return 0;
    }

分析:挑战236页   构造两个额外的点s和t,表示分别属于a,b集合,建图之后求最小割也就是最大流就好
不弧优化的话将会超时

这篇关于poj 3469 Dual Core CPU 最大流建图思想 dinic 弧优化很重要的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/599996

相关文章

MyBatisPlus如何优化千万级数据的CRUD

《MyBatisPlus如何优化千万级数据的CRUD》最近负责的一个项目,数据库表量级破千万,每次执行CRUD都像走钢丝,稍有不慎就引起数据库报警,本文就结合这个项目的实战经验,聊聊MyBatisPl... 目录背景一、MyBATis Plus 简介二、千万级数据的挑战三、优化 CRUD 的关键策略1. 查

Java进程CPU使用率过高排查步骤详细讲解

《Java进程CPU使用率过高排查步骤详细讲解》:本文主要介绍Java进程CPU使用率过高排查的相关资料,针对Java进程CPU使用率高的问题,我们可以遵循以下步骤进行排查和优化,文中通过代码介绍... 目录前言一、初步定位问题1.1 确认进程状态1.2 确定Java进程ID1.3 快速生成线程堆栈二、分析

conda安装GPU版pytorch默认却是cpu版本

《conda安装GPU版pytorch默认却是cpu版本》本文主要介绍了遇到Conda安装PyTorchGPU版本却默认安装CPU的问题,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的... 目录一、问题描述二、网上解决方案罗列【此节为反面方案罗列!!!】三、发现的根本原因[独家]3.1 p

Linux CPU飙升排查五步法解读

《LinuxCPU飙升排查五步法解读》:本文主要介绍LinuxCPU飙升排查五步法,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录排查思路-五步法1. top命令定位应用进程pid2.php top-Hp[pid]定位应用进程对应的线程tid3. printf"%

无法启动此程序因为计算机丢失api-ms-win-core-path-l1-1-0.dll修复方案

《无法启动此程序因为计算机丢失api-ms-win-core-path-l1-1-0.dll修复方案》:本文主要介绍了无法启动此程序,详细内容请阅读本文,希望能对你有所帮助... 在计算机使用过程中,我们经常会遇到一些错误提示,其中之一就是"api-ms-win-core-path-l1-1-0.dll丢失

SpringBoot中HTTP连接池的配置与优化

《SpringBoot中HTTP连接池的配置与优化》这篇文章主要为大家详细介绍了SpringBoot中HTTP连接池的配置与优化的相关知识,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一... 目录一、HTTP连接池的核心价值二、Spring Boot集成方案方案1:Apache HttpCl

PyTorch高级特性与性能优化方式

《PyTorch高级特性与性能优化方式》:本文主要介绍PyTorch高级特性与性能优化方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、自动化机制1.自动微分机制2.动态计算图二、性能优化1.内存管理2.GPU加速3.多GPU训练三、分布式训练1.分布式数据

MySQL中like模糊查询的优化方案

《MySQL中like模糊查询的优化方案》在MySQL中,like模糊查询是一种常用的查询方式,但在某些情况下可能会导致性能问题,本文将介绍八种优化MySQL中like模糊查询的方法,需要的朋友可以参... 目录1. 避免以通配符开头的查询2. 使用全文索引(Full-text Index)3. 使用前缀索

C#实现高性能Excel百万数据导出优化实战指南

《C#实现高性能Excel百万数据导出优化实战指南》在日常工作中,Excel数据导出是一个常见的需求,然而,当数据量较大时,性能和内存问题往往会成为限制导出效率的瓶颈,下面我们看看C#如何结合EPPl... 目录一、技术方案核心对比二、各方案选型建议三、性能对比数据四、核心代码实现1. MiniExcel

判断PyTorch是GPU版还是CPU版的方法小结

《判断PyTorch是GPU版还是CPU版的方法小结》PyTorch作为当前最流行的深度学习框架之一,支持在CPU和GPU(NVIDIACUDA)上运行,所以对于深度学习开发者来说,正确识别PyTor... 目录前言为什么需要区分GPU和CPU版本?性能差异硬件要求如何检查PyTorch版本?方法1:使用命