问题: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 Ai and 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: a, b, w. 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

回答:题目大意是第i个moduel在两个核的运行时间分别为ai、bi,两个modue之间的数据交换要有花费。可以将其建成一个网络流模型,源点和汇点分别是两个核,记为0,n+1,然后建图,求最小割即可。

#include<cstdio>  
    #include<cstring>  
    #include<iostream>  
    using namespace std;  
      
    const int N=20100;  
    const int M=200200;  
    const int inf=1<<29;  
    struct node  
    {  
     int v,f;  
     int next;  
    }edge[8*M];  
    int head[N],num;  
    int n,m;  
    int s,t,NN;  
      
    void init()  
    {  
     for(int i=0;i<=n+2;i++)  
      head[i]=-1;  
     num=0;  
    }  
      
    void addege(int u,int v,int f)  
    {  
     edge[num].v=v;  
     edge[num].f=f;  
     edge[num].next=head[u];  
     head[u]=num++;  
     edge[num].v=u;  
     edge[num].f=0;  
     edge[num].next=head[v];  
     head[v]=num++;  
    }  
      
    int sap()  
    {  
     int pre[N],cur[N],dis[N],gap[N];  
     int flow=0,aug=inf,u;  
     bool flag;  
     int i;  
     for(i=1;i<=NN;i++)  
     {  
      cur[i]=head[i];  
      gap[i]=dis[i]=0;  
     }  
     gap[s]=NN;  
     u=pre[s]=s;  
     while(dis[s]<NN)  
     {  
      flag=0;  
      for(int &j=cur[u];j!=-1;j=edge[j].next)  
      {  
       int v=edge[j].v;  
       if(edge[j].f>0 && dis[u]==dis[v]+1)  
       {  
        flag=1;  
        if(edge[j].f<aug) aug=edge[j].f;  
        pre[v]=u;  
        u=v;  
        if(u==t)  
        {  
         flow+=aug;  
         while(u!=s)  
         {  
          u=pre[u];  
          edge[cur[u]].f-=aug;  
          edge[cur[u]^1].f+=aug;  
         }  
         aug=inf;  
        }  
        break;  
       }  
      }  
      if(flag) continue;  
      int mindis=NN;  
      for(int j=head[u];j!=-1;j=edge[j].next)  
      {  
       int v=edge[j].v;  
       if(edge[j].f>0 && dis[v]<mindis)  
       {  
        mindis=dis[v];  
        cur[u]=j;  
       }  
      }  
      if((--gap[dis[u]])==0) break;  
      gap[dis[u]=mindis+1]++;  
      u=pre[u];  
     }  
     return flow;  
    }  
      
    int main()  
    {  
     scanf("%d%d",&n,&m);  
     int i,j;  
     int a,b,w;  
     s=0;t=n+1;NN=n+2;  
     init();  
     for(i=1;i<=n;i++)  
     {  
      scanf("%d%d",&a,&b);  
      addege(s,i,a);  
      addege(i,t,b);  
     }  
     for(i=1;i<=m;i++)  
     {  
      scanf("%d%d%d",&a,&b,&w);  
      addege(a,b,w);  
      addege(b,a,w);  
     }  
     printf("%d/n",sap());  
     return 0;  
    }

Dinic问题的更多相关文章

  1. ACM/ICPC 之 有流量上下界的网络流-Dinic(可做模板)(POJ2396)

    //有流量上下界的网络流 //Time:47Ms Memory:1788K #include<iostream> #include<cstring> #include<c ...

  2. ACM/ICPC 之 Dinic+枚举最小割点集(可做模板)(POJ1815)

    最小割的好题,可用作模板. //Dinic+枚举字典序最小的最小割点集 //Time:1032Ms Memory:1492K #include<iostream> #include< ...

  3. 网络流dinic实现总结

    太羞耻了,搞了半天居然没发现自己写的不是dinic,直到被一道时限紧的题目卡掉才发现 int dfs(int now,int flow,int sum) { if(now==n) return flo ...

  4. ACM/ICPC 之 Dinic算法(POJ2112)

    Optimal Milking //二分枚举最大距离的最小值+Floyd找到最短路+Dinic算法 //参考图论算法书,并对BFS构建层次网络算法进行改进 //Time:157Ms Memory:65 ...

  5. hihoCoder 1393 网络流三·二分图多重匹配(Dinic求二分图最大多重匹配)

    #1393 : 网络流三·二分图多重匹配 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 学校的秋季运动会即将开始,为了决定参赛人员,各个班又开始忙碌起来. 小Hi和小H ...

  6. HDU 3572 Task Schedule(拆点+最大流dinic)

    Task Schedule Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) To ...

  7. ISAP算法对 Dinic算法的改进

    ISAP算法对 Dinic算法的改进: 在刘汝佳图论的开头引言里面,就指出了,算法的本身细节优化,是比较复杂的,这些高质量的图论算法是无数优秀算法设计师的智慧结晶. 如果一时半会理解不清楚,也是正常的 ...

  8. hdu4292Food(最大流Dinic算法)

    /* 题意:每一个人都有喜欢的吃的和喝的,每一个人只选择一个数量的吃的和一个数量的喝的,问能满足最多的人数!? 思路:建图很是重要!f-food, p-people, d-drink 建图: 0(源点 ...

  9. DINIC网络流+当前弧优化

    DINIC网络流+当前弧优化 const inf=; type rec=record s,e,w,next:longint; end; var b,bb,d,q,tb:..] of longint; ...

  10. dinic模板

    procedure addedge(u,v,cap:longint); begin sid[tot].u:=u; sid[tot].v:=v; sid[tot].cap:=cap; sid[tot]. ...

随机推荐

  1. HDU 2669 Romantic【扩展欧几里德】

    裸的扩展欧几里德,求最小的X,X=((X0%b)+b)%b,每个X都对应一个Y,代入原式求解可得 #include<stdio.h> #include<string.h> ty ...

  2. vector中pair的排序方法

    直接上代码: bool judge(const pair<int,char> a, const pair<int ,char> b) { return a.first<b ...

  3. Python创建Cocos2d-x 2.2方法

    把创建项目做成一个批处理,当创建项目时可以省时省力很多. 操作步骤 1.在 E:\cocos2d-x-2.2.1\tools\project-creator 目录下创建 create_project. ...

  4. java 静态方法和实例方法的区别

    转自 java 静态方法和实例方法的区别 静态方法和实例方法的区别主要体现在两个方面:   在外部调用静态方法时,可以使用"类名.方法名"的方式,也可以使用"对象名.方法 ...

  5. 转:Android开发实践:用脚本编译Android工程

    转自: http://ticktick.blog.51cto.com/823160/1365947 一般情况下,我们都是使用Eclipse+ADT插件或者Android studio软件来编译Andr ...

  6. ubuntu 命令收集

    1. ctrl + Alt + F1:   进入纯粹的命令行. 2. ctr + Alt + T :    从图形界面打开终端.

  7. android源码在线查看

    http://grepcode.com/project/repository.grepcode.com/java/ext/com.google.android/android/

  8. java读取文件批量插入记录

    只是一个例子,方便以后查阅. import ey.db.oracle.OracleHelper; import ey.db.type.*; import java.io.BufferedReader; ...

  9. [Python] 利用commands模块执行Linux shell命令

    http://blog.csdn.net/dbanote/article/details/9414133 http://zhou123.blog.51cto.com/4355617/1312791

  10. Qt——QLineEdit使用总结

    QLineEdit是一个单行文本编辑控件. 使用者可以通过很多函数,输入和编辑单行文本,比如撤销.恢复.剪切.粘贴以及拖放等. 通过改变QLineEdit的 echoMode() ,可以设置其属性,比 ...