Dinic问题

时间:2022-09-07 19:42:12

问题: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&sol;ICPC 之 有流量上下界的网络流-Dinic&lpar;可做模板&rpar;&lpar;POJ2396&rpar;

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

  2. ACM&sol;ICPC 之 Dinic&plus;枚举最小割点集&lpar;可做模板&rpar;&lpar;POJ1815&rpar;

    最小割的好题,可用作模板. //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&sol;ICPC 之 Dinic算法(POJ2112)

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

  5. hihoCoder 1393 网络流三&&num;183&semi;二分图多重匹配(Dinic求二分图最大多重匹配)

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

  6. HDU 3572 Task Schedule(拆点&plus;最大流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网络流&plus;当前弧优化

    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. 拥抱&period;NET Core,学习&period;NET Core的基础知识补遗

    前言 .NET Core的新特性之一就是跨平台,但由于对之前框架的兼容导致编写一个.NET Core类库变得相当复杂,主要体现为相当多的框架目标和支持平台,今天我们就对.NET Core的跨平台特性进 ...

  2. OpenSUSE 开启SSH 和网络设置

    一.开启SSH 1.确认SSH包已安装. 2.确认防火墙没有拦截. 3.确认SSH服务已启动.4.确认SSH配置文件设置正确. 环境: SSH已安装,防火墙设置不清楚,SSH服务已启动,配置文件不清楚 ...

  3. 通过Keepalived实现Redis Failover自动故障切换功能

    通过Keepalived实现Redis Failover自动故障切换功能[实践分享] 参考资料: http://patrick-tang.blogspot.com/2012/06/redis-keep ...

  4. tarjan求桥、割顶

    若low[v]>dfn[u],则(u,v)为割边.但是实际处理时我们并不这样判断,因为有的图上可能有重边,这样不好处理.我们记录每条边的标号(一条无向边拆成的两条有向边标号相同),记录每个点的父 ...

  5. Android bluetooth用户自定义数据

    default mac: [btif_core.c] btif_fetch_local_bdaddr() default device name: [btif_dm.c] btif_get_defau ...

  6. pig hive 区别

    Pig是一种编程语言,它简化了Hadoop常见的工作任务.Pig可加载数据.表达转换数据以及存储最终结果.Pig内置的操作使得半结构化数据变得有意义(如日志文件).同时Pig可扩展使用Java中添加的 ...

  7. KVO的使用

    KVO的使用 KVO是一种设计模式,名为观察者. addObserver:forKeyPath:options:context: 通知其他对象的方法,这个方法在NSObject中就已经申明了,也就是说 ...

  8. java把函数作为参数传递

    public class Tool { public void a()// /方法a { System.out.print("tool.a()..."); } public voi ...

  9. 在C&num;中使用 Win32 和其他库

    C# 用户经常提出两个问题:“我为什么要另外编写代码来使用内置于 Windows® 中的功能?在框架中为什么没有相应的内容可以为我完成这一任务?”当框架小组构建他们的 .NET 部分时,他们评估了为使 ...

  10. Angular HttpClient upload file with FormData

    从sof上找到一个example:https://*.com/questions/46206643/asp-net-core-2-0-and-angular-4-3-file- ...