POJ 3469 Dual Core CPU (最小割)

POJ-3469 Dual Core CPU最小割 Dual Core CPU 题目链接:Dual Core CPU 题意 思路 照书上的话来说,用最小的费用将对象分成两个集合的问题,常常可以转换成最小割问题,这道题就是一道典型的例子。 具体的还需要证明 记在核A上执行的模块集合是S,而在核B上执行的模块集合为T。考虑以模块为顶点,并且还有额外的源点s和汇点t的图。我们也记图s-t割所对应的包含s的顶点集合为S,包含t的集合为T,然后来考察他们... 阅读详情
Dual Core CPU
Time Limit: 15000MS Memory Limit: 131072K
Total Submissions: 25064 Accepted: 10860
Case Time Limit: 5000MS

Description

As more and more computers are equipped with dual core CPU, SetagLilb, the Chief Technology Officer of TinySoft Corporation, decided to update their famous product - SWODNIW.

The routine consists of N modules, and each of them should run in a certain core. The costs for all the routines to execute on two cores has been estimated. Let's define them as Aiand Bi. Meanwhile, M pairs of modules need to do some data-exchange. If they are running on the same core, then the cost of this action can be ignored. Otherwise, some extra cost are needed. You should arrange wisely to minimize the total cost.

Input

There are two integers in the first line of input data, N and M (1 ≤ N ≤ 20000, 1 ≤ M ≤ 200000) .
The next N lines, each contains two integer, Ai and Bi.
In the following M lines, each contains three integers: abw. The meaning is that if module a and module b don't execute on the same core, you should pay extra w dollars for the data-exchange between them.

Output

Output only one integer, the minimum total cost.

Sample Input

3 1
1 10
2 10
10 3
2 3 1000

Sample Output

13

Source


题意:

每个任务可以在A里完成,也可以在B里完成,分别给你cost。

另外有m个限制,如果a和b不再同一个系统里完成,就要额外付出一个cost。

求最少的cost。

POINT:

网络流最难的就是建模。

每个任务在A里完成==s和任务建一个有向边。

B里完成==任务和t建一个有向边。

ab有要求,就a和b建一个无向边。

例如样例。


割就是在这些路里分割,把s和t分割掉,这个就不做解释了。

然后割有很多,就想里面各种颜色的割。我们选择容量最小的最小割。

最大流=最小割。即紫色的那条。

#include <iostream>
#include <stdio.h>
#include <string.h>
#include <algorithm>
#include <queue>
#include <vector>
using namespace std;
#define  LL long long
const int maxn = 20010;
const int inf = 0x3f3f3f3f;
int n,m,t,s;
struct node
{
    int from,to,flow,cap;
    node(int u,int v,int f,int c):
        from(u),to(v),flow(f),cap(c){}
};
vector<int>edge[maxn];
vector<node>len;
void add(int u,int v,int cap)
{
    len.push_back(node(u,v,0,cap));
    len.push_back(node(v,u,0,0));
    int now=len.size();
    edge[u].push_back(now-2);
    edge[v].push_back(now-1);
}
int cur[maxn];
int d[maxn],vis[maxn];
bool bfs()
{
    queue<int>q;
    memset(vis,0,sizeof vis);
    memset(d,0,sizeof d);
    q.push(0);
    d[0]=1;
    vis[0]=1;
    while(!q.empty())
    {
        int u=q.front();q.pop();
        for(int i=0;i<edge[u].size();i++)
        {
            node e=len[edge[u][i]];
            if(!vis[e.to]&&e.cap>e.flow)
            {
                d[e.to]=d[u]+1;
                vis[e.to]=1;
                q.push(e.to);
            }
        }
    }
    return vis[t];
}
int dfs(int u,int a)
{
    if(u==t||a==0) return a;
    int flow=0,f;
    for(int &i = cur[u];i<edge[u].size();i++)
    {
        node &e = len[edge[u][i]];
        if(d[u]==d[e.to]-1&&(f=dfs(e.to,min(a,e.cap-e.flow)))>0)
        {
            flow+=f;
            e.flow+=f;
            len[edge[u][i]^1].flow-=f;
            a-=f;
        }
        if(a==0) break;
    }
    if(flow==0) d[u]=-1;
    return flow;
}
int maxflow()
{
    int ans=0;
    while(bfs())
    {
        memset(cur,0,sizeof cur);
        ans+=dfs(s,inf);
    }
    return ans;
}
int main()
{
    while(~scanf("%d %d",&n,&m))
    {
        for(int i=1;i<=n;i++)
        {
            int a,b;
            scanf("%d %d",&a,&b);
            add(0,i,a);
            add(i,n+1,b);
        }
        for(int i=1;i<=m;i++)
        {
            int u,v,cap;
            scanf("%d %d %d",&u,&v,&cap);
            add(u,v,cap);
            add(v,u,cap);
        }
        s=0;
        t=n+1;
        printf("%d\n",maxflow());
    }
}








【实战指南】WinPE环境下360系统急救箱的病毒查杀全流程解析 本文详细解析了在WinPE环境下使用360系统急救箱进行病毒查杀的全流程。从制作WinPE启动盘到进入PE环境,再到360急救箱的深度使用和系统修复,提供了实用技巧和常见问题解决方案,帮助用户高效清除顽固病毒。 阅读详情

相关推荐

USB2.0信号完整性测试之眼图

名称线缆颜色引脚描述红色绿色白色GND黑色。

qq_53766840的博客 3217

POJ 3469 Dual Core CPU (最大流最小割经典题)

Dual Core CPU Time Limit: 15000MS   Memory Limit: 131072K Total Submissions: 24781   Accepted: 10732 Case Time Limit: 5000MS Description As more and more computers

K键盘里的青春K 1062

[系统安全] 四十七.恶意软件分析 (3)动态分析经典沙箱Cape的安装和基础用法详解

系统安全将更好地帮助初学者了解病毒逆向分析和系统安全。前文详细介绍恶意代码静态分析经典工具Capa的基础用法,以及批量提取静态特征和ATT&CK技战术,主要是从提取的静态特征Json文件中提取关键特征。这篇文章将详细讲解动态分析沙箱Cape,其是一个开源的自动恶意软件分析系统,通过自动运行和分析恶意软件,全面分析和提取恶意软件的关键特征。本文先介绍Cape沙箱的安装和基础用法,后续随着深入再分享。基础性文章,希望对您有帮助!

杨秀璋的专栏 6650

poj3469 Dual Core CPU

Dual Core CPU Time Limit:15000MS Memory Limit:131072K Total Submissions:25576 Accepted:11033 Case Time Limit:5000MS Description As more and more comput...

weixin_30241919的博客 187

Dual Core CPU最小割

Dual Core CPU Time Limit: 15000MS Memory Limit: 131072K Total Submissions: 26136 Accepted: 11270 Case Time Limit: 5000MS Description As more and more computers are equipped with dual c...

苟为蒟蒻又何妨 1182

Dual Core CPU

题目描述 (传送门) As more and more computers are equipped with dual core CPU, SetagLilb, the Chief Technology Officer of TinySoft Corporation, decided to update their famous product - SWODNIW. The routine...

看流云落成雨滴 891

poj 3469 Dual Core CPU(最小割)

Description As more and more computers are equipped with dual core CPU, SetagLilb, the Chief Technology Officer of TinySoft Corporation, decided to update their famous product - SWODNIW. The routi

千里之行 始于足下 771

POJ 3469Dual Core CPU最小割

题目: 有两个CPU来处理 NNN 个机器,对于每个机器来说,在两个CPU上处理的费用分别是 AiAiAi 和 BiBiBi 。现在还有 mmm 对机器需要进行数据交换,每对机器的数据交换都有其对应的交换费用,但是如果这两台需要进行数据交换的机器是在相同的CPU上处理的,则不需要支付交换费用。问处理所有机器的最小花费。 思路: 看到了最小花费,因此很自然的想到了最小割模型,于是问题就变成了如何建...

lucius-liu.cn 1579

最小割POJ-3469 Dual Core CPU

Dual Core CPU Time Limit: 15000MS   Memory Limit: 131072K       Case Time Limit: 5000MS Description As more and more computers are equipped with dual core CPU, Setag

JSure的代码库 810

poj3469 Dual Core CPU——最小割

题目:http://poj.org/problem?id=3469 最小割水题(竟然没能1A); 代码如下: #include<iostream> #include<cstdio> #include<cstring> #include<queue> using namespace std; int const maxn=...

aodan5477的博客 169

Poj 3469 Dual Core CPU最小割

Poj 3469 Dual Core CPU题目描述题解代码 题目描述 Dual Core CPU Time Limit: 15000MS Memory Limit: 131072K Total Submissions: 28432 Description As more and more computers are equipped with dual core CPU, SetagLilb, the Chief Technology Officer of TinySoft Corporation, de

weixin_43308078的博客 220

poj 3469 Dual Core CPU 最大流-最小割

题目:http://poj.org/problem?id=3469 题意:有双核处理器,有n个任务,给出每个任务在分别在两个处理核心上工作的花费,然后有m行,每行给出两个任务,如果两个任务不在同一个处理核心上工作,那么将有额外的花费。求最小花费 思路:碰到的第一题求最小割-最大流的题目,思路不是自己的。将两个CPU分别视为源点和汇点、模块视为顶点,则可以按照以下方式构图:对于第i个模块在每个C

弱智就要多努力 979

POJ 3469 Dual Core CPU最小割,建图)

最大流dinic算法,建图 题目意思: 双核计算机A,B,有n个模块,每个模块都要再CPU中运行,并且知道了每个模块在每个CPU上的运行时间, 如果它们运行在同一个cpu,就可以忽略共享数据的花费,否则需要额外的费用,求完成所有任务的最小花费; 本题要点: 1、最大流量=最小割容量 2、建图 建图:让两个CPU分别为图的源点s和汇点t,已知每个模块与两个CPU的运行时间Ai,Bi,则对于每个模块, 从s连向一条容量为Ai的边到这个模块,在从这个模块连一条容量为Bi的边到t;对于在不同模块运行的模块需要额外的

qq_38232157的博客 218

POJ 3469Dual Core CPU最小割

【题意】 【分析】 【建图】 留着有空再写 【Mark】 数据较大,n<=20000。使用dinic的递归写法跑了7s+,非递归TLE.sap跑了2s+。 谁说非递归效率高? 1 #include<stdio.h> 2 #include<string.h> 3 #include<math.h> ...

dechi5213的博客 178

POJ 3469Dual Core CPU --最小割

【题目地址】点击打开链接 【分析】 这种题应该一看就是最小割的题目。 然后我们考虑这样建图: 1.S向每个任务连一条容量为A[i]的边。 2.每个任务向T连一条容量为B[i]的边。 3.如果输入u,v,w。那么u向v连容量w的边,v向u连容量w的边。 那么如果任务a,b是由不同的cpu完成的,即各自分属S集和T集。那么割边集必然包含连接a,b的边。 【代码】

Ciocio 905

Dual Core CPU POJ - 3469 经典最小割

As more and more computers are equipped with dual core CPU, SetagLilb, the Chief Technology Officer of TinySoft Corporation, decided to update their famous product - SWODNIW. The routine consists of

liluoyu_1016的博客 423

POJ 3469 Dual Core CPU 最小割问题

链接:http://poj.org/problem?id=3469 题意:给出多个任务在两个处理器分别处理时的花费,给出一些条件有些任务在不同的处理器处理会有额外的花费,问最小的花费是多少。 思路:最小割问题。网络流算法不难,难的是建图。看到将图分成两部分的问题就要向最小割上去想。 本题建图: 1.源点和汇点分别是两个核。 2.弧长是模块在两个核各自的花费。 3

看曙光 1360

POJ3469 Dual Core CPU 【最大流最小割

Language:DefaultDual Core CPU Time Limit: 15000MSMemory Limit: 131072KTotal Submissions: 24695Accepted: 10690Case Time Limit: 5000MSDescriptionAs more and more computers are equipped with dual core CPU

LuRiCheng的博客 539

poj 3469 Dual Core CPU ( 最小割

题意: 双核CPU,n个模块,每个模块必须运行在某个CPU核心上,每个模块在cpu单核的消耗A和B,M对模块要共享数据,如果在同一个核心上不用消耗,否则需要耗费。安排N个模块,使得总耗费最小 思路: 将两个cpu核心看成源点和汇点,其他模块分别与源点汇点连线(表示每个模块可以在任意cpu上运行),m对模块分别连双向边,要使得模块只能在一个cpu上运行,就是找到一个割,源点和汇点必

Dizzy的专栏 265

poj 3469 Dual Core CPU最小割模型)

ACM确实是需要毅力的东西,最近刷网络流,竭尽全力的一个ac。。。 把题目中的模型转换成最小割模型,然后就是模版了 为什么是最小割?因为显然任意一个割中模块只能多放不能少,而满足条件的一定是一个割,所以满足条件的就是极小割,所有极小割也满足条件,最小割是极小割,所以花费最小的就是最小割 但是却百思不得其解的tle了,纠结,死都发现不了前几天自己写的那个模版里有什么问题,多路增广啊,gap优化

量子流逝 974

poj 3469 Dual Core CPU最小割

题目链接:哆啦A梦传送门 题意: 有n个任务,两个机器A和B,每个任务要么在A上完成,要么在B上完成,而且知道每个任务在A和B机器上完成所需要的费用。然后再给m行,每行a,b,w三个数字。表示如果a任务和b任务不在同一个机器上工作的话,需要额外花费w。现在要求出完成所有任务最小的花费是多少。 题解:我们将A B分隔开建立,源点到任务i连边,权值为Ai,任务i与汇点连边,权值为Bi。对于...

Jiandong 252
上一篇: HDU 6178 Monkeys (贪心+输入挂)
下一篇: 网络流对于二分图的 最小点覆盖数 最大匹配数 最大独立点集数 的作用
Mr_Treeeee
博客等级 码龄10年 38粉丝 551原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值