将两个CPU分别视作源点和汇点

对于那些不在同一个CPU中的模块会产生的代价作为一条双向的容量弧

这里每个模块可以在任意一个CPU中运行,相当于寻找一个割,分割后,在S集合中的模块安装在第一个CPU中

那么在T集合中的模块就是在第二个CPU中,所求的最小割也正是最小耗费

根据最大流=最小割的原理,这里相当于是在求最大流

 #include <cstdio>
#include <cstring>
#include <iostream>
#include <queue> using namespace std;
const int N = ;
const int INF = 0x3f3f3f3f;
int lev[N],first[N],k; struct Edge{
int u , v , cap , flow , next;
}e[N*]; void add_edge(int u , int v , int cap)
{
e[k].u=u , e[k].v = v , e[k].cap=cap , e[k].flow= , e[k].next = first[u];
first[u]=k++;
}
//寻找层次网络是否存在
bool find_level(int n)
{
queue<int> q;
q.push();
memset(lev , , sizeof(lev));
lev[]=;
while(!q.empty())
{
int u=q.front();
q.pop();
for(int i=first[u] ; i!=- ; i=e[i].next){
int v = e[i].v;
if(!lev[v] && e[i].cap > e[i].flow){
lev[v] = lev[u]+;
q.push(v);
}
}
}
return lev[n+]>;
} int Dinic(int n , int u , int sum)
{
int s = sum , t;
if(u == n+) return sum;
for(int i=first[u] ; i!=- ;i=e[i].next)
{
int v = e[i].v;
if(lev[v] != lev[u]+ || e[i].cap <= e[i].flow) continue;
t = Dinic(n , v , min(sum , e[i].cap - e[i].flow));
e[i].flow += t;
e[i^].flow -= t;
sum-=t;
}
return s-sum;
} int main()
{
// freopen("a.in" , "r" , stdin);
int n , m , u , v , cap1 , cap2;
while(scanf("%d%d" , &n , &m) == )
{
k=;
memset(first , - , sizeof(first));
for(int i= ; i<n ; i++)
{
scanf("%d%d" , &cap1 , &cap2);
//添加双向弧
add_edge( , i+ , cap1);
add_edge(i+ , , ); add_edge(i+ , n+ , cap2);
add_edge(n+ , i+ , );
}
for(int i= ; i<m ; i++)
{
scanf("%d%d%d" , &u , &v , &cap1);
add_edge(u , v , cap1);
add_edge(v , u , cap1);
}
int max_flow = ;
while(find_level(n)){
max_flow += Dinic(n , , INF);
}
printf("%d\n" , max_flow);
}
return ;
}

POJ 3469 网络流最小割的更多相关文章

  1. 【题解】 bzoj3894: 文理分科 (网络流/最小割)

    bzoj3894,懒得复制题面,戳我戳我 Solution: 首先这是一个网络流,应该还比较好想,主要就是考虑建图了. 我们来分析下题面,因为一个人要么选文科要么选理科,相当于两条流里面割掉一条(怎么 ...

  2. 【bzoj3774】最优选择 网络流最小割

    题目描述 小N手上有一个N*M的方格图,控制某一个点要付出Aij的代价,然后某个点如果被控制了,或者他周围的所有点(上下左右)都被控制了,那么他就算是被选择了的.一个点如果被选择了,那么可以得到Bij ...

  3. 【bzoj1143】[CTSC2008]祭祀river Floyd+网络流最小割

    题目描述 在遥远的东方,有一个神秘的民族,自称Y族.他们世代居住在水面上,奉龙王为神.每逢重大庆典, Y族都会在水面上举办盛大的祭祀活动.我们可以把Y族居住地水系看成一个由岔口和河道组成的网络.每条河 ...

  4. 【bzoj1797】[Ahoi2009]Mincut 最小割 网络流最小割+Tarjan

    题目描述 给定一张图,对于每一条边询问:(1)是否存在割断该边的s-t最小割 (2)是否所有s-t最小割都割断该边 输入 第一行有4个正整数,依次为N,M,s和t.第2行到第(M+1)行每行3个正 整 ...

  5. 【bzoj1976】[BeiJing2010组队]能量魔方 Cube 网络流最小割

    题目描述 一个n*n*n的立方体,每个位置为0或1.有些位置已经确定,还有一些需要待填入.问最后可以得到的 相邻且填入的数不同的点对 的数目最大. 输入 第一行包含一个数N,表示魔方的大小. 接下来 ...

  6. 【bzoj4177】Mike的农场 网络流最小割

    题目描述 Mike有一个农场,这个农场n个牲畜围栏,现在他想在每个牲畜围栏中养一只动物,每只动物可以是牛或羊,并且每个牲畜围栏中的饲养条件都不同,其中第i个牲畜围栏中的动物长大后,每只牛可以卖a[i] ...

  7. 【bzoj3438】小M的作物 网络流最小割

    原文地址:http://www.cnblogs.com/GXZlegend/p/6801522.html 题目描述 小M在MC里开辟了两块巨大的耕地A和B(你可以认为容量是无穷),现在,小P有n中作物 ...

  8. 【bzoj3144】[Hnoi2013]切糕 网络流最小割

    题目描述 输入 第一行是三个正整数P,Q,R,表示切糕的长P. 宽Q.高R.第二行有一个非负整数D,表示光滑性要求.接下来是R个P行Q列的矩阵,第z个 矩阵的第x行第y列是v(x,y,z) (1≤x≤ ...

  9. 【bzoj3894】文理分科 网络流最小割

    原文地址:http://www.cnblogs.com/GXZlegend 题目描述 文理分科是一件很纠结的事情!(虽然看到这个题目的人肯定都没有纠结过) 小P所在的班级要进行文理分科.他的班级可以用 ...

随机推荐

  1. IOS利用Core Text对文字进行排版 - 转

    原贴地址:http://hi.baidu.com/jwq359699768/blog/item/5df305c893413d0a7e3e6f7b.html core text 这个包默认是没有的,要自 ...

  2. 转-iOS 动画总结----UIView动画

    来自:http://blog.csdn.net/huifeidexin_1/article/details/7597868/ 1.概述 UIKit直接将动画集成到UIView类中,实现简单动画的创建过 ...

  3. C语言中Static和Const关键字的的作用 -- 转

    static作用:“改变生命周期” 或者 “改变作用域” 程序的局部变量存在于(堆栈)中,全局变量存在于(静态区 )中,动态申请数据存在于( 堆)中. 1.作用于变量: 用static声明局部变量-- ...

  4. ubuntu14.04 + GTX980ti + cuda 8.0 ---Opencv3.1.0(基础+opecv_contrib)配置

    如果喜欢视频的话:YouTube 上有视频教程 https://www.youtube.com/watch?v=1YIAp3Lh5hI 后来我在mac上安装最新版的OpenCV 找到了一片非常详细的教 ...

  5. 移动端UI自动化Appium测试——获取APK的Package及Activity属性值

    1.如果有代码环境,直接在AndroidManifest.xml中查找: package值: Activity值: 2.如果没有开发代码,直接用命令获取: cmd进入到 android-sdk-win ...

  6. 移动web开发基础(一)——像素

    这篇文章要弄清楚2个问题:一.什么是逻辑像素和物理像素:二.这两者有什么关系. 对于问题一,先抛出两个概念.我们经常使用的px就是逻辑像素,是浏览器使用的抽象单位:物理像素又和dp/pt(设备无关像素 ...

  7. Android学习备忘笺01Activity

    01.设置视图 在Android Studio新建的项目中,通过 setContentView(R.layout.activity_main);方法将res/layout/activity_main. ...

  8. 安装CentOS--设置网络_1

    (1)在登录黑框中输入如下命令,让CentOS 7自动获取一个IP地址: # dhclient (2)正常情况下不会有任何输出内容.用如下命令查看获取到的IP地址: # ip addr 它将返回如图所 ...

  9. oracle 创建表

    --创建表 create table browser_track( btId number not null , opend_id ) not null, url_address ) not null ...

  10. linux下mysql开启可访问

    修改mysql配置连接信息 将bind-address注释 vim /etc/my.cnf 修改mysql用户授权 mysql>GRANT ALL PRIVILEGES ON *.* TO ' ...