zoukankan      html  css  js  c++  java
  • POJ 3469(Dual Core CPU-最小割)[Template:网络流dinic V2]

    Language:
    Dual Core CPU
    Time Limit: 15000MS   Memory Limit: 131072K
    Total Submissions: 19321   Accepted: 8372
    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 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: 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



    最小割的模板,事实上就是最大流

    注意:

    Verson 2:

    1.修复Bug。在本次模板中改动了q队列的长度。


    题目。裸最小割,

    设S为用模块A的集合,T为模块B

    s->任务i  //模块B的cost

    任务i->t  //模块A的cost

    任务i->任务j //(i,j)不在一个集合的cost。注意最小割,要2个方向(最小割仅仅保证s->t没路径,t->s的路径不用割)







    #include<cstdio>
    #include<cstring>
    #include<cstdlib>
    #include<algorithm>
    #include<functional>
    #include<iostream>
    #include<cmath>
    #include<cctype>
    #include<ctime>
    using namespace std;
    #define For(i,n) for(int i=1;i<=n;i++)
    #define Fork(i,k,n) for(int i=k;i<=n;i++)
    #define Rep(i,n) for(int i=0;i<n;i++)
    #define ForD(i,n) for(int i=n;i;i--)
    #define RepD(i,n) for(int i=n;i>=0;i--)
    #define Forp(x) for(int p=pre[x];p;p=next[p])
    #define Forpiter(x) for(int &p=iter[x];p;p=next[p])
    #define Lson (x<<1)
    #define Rson ((x<<1)+1)
    #define MEM(a) memset(a,0,sizeof(a));
    #define MEMI(a) memset(a,127,sizeof(a));
    #define MEMi(a) memset(a,128,sizeof(a));
    #define INF (2139062143)
    #define F (100000007)
    #define MAXn (20000+10)
    #define MAXm (200000+10)
    #define MAXN (MAXn+2)
    #define MAXM ((MAXn*2+MAXm*2)*2+100)
    long long mul(long long a,long long b){return (a*b)%F;}
    long long add(long long a,long long b){return (a+b)%F;}
    long long sub(long long a,long long b){return (a-b+(a-b)/F*F+F)%F;}
    typedef long long ll;
    class Max_flow  //dinic+当前弧优化   
    {    
    public:    
        int n,s,t;    
        int q[MAXN];    
        int edge[MAXM],next[MAXM],pre[MAXN],weight[MAXM],size;    
        void addedge(int u,int v,int w)      
        {      
            edge[++size]=v;      
            weight[size]=w;      
            next[size]=pre[u];      
            pre[u]=size;      
        }      
        void addedge2(int u,int v,int w){addedge(u,v,w),addedge(v,u,0);}     
        bool b[MAXN];    
        int d[MAXN];    
        bool SPFA(int s,int t)      
        {      
            For(i,n) d[i]=INF;    
            MEM(b)    
            d[q[1]=s]=0;b[s]=1;      
            int head=1,tail=1;      
            while (head<=tail)      
            {      
                int now=q[head++];      
                Forp(now)      
                {      
                    int &v=edge[p];      
                    if (weight[p]&&!b[v])      
                    {      
                        d[v]=d[now]+1;      
                        b[v]=1,q[++tail]=v;      
                    }      
                }          
            }      
            return b[t];      
        }     
        int iter[MAXN];  
        int dfs(int x,int f)  
        {  
            if (x==t) return f;  
            Forpiter(x)  
            {  
                int v=edge[p];  
                if (weight[p]&&d[x]<d[v])  
                {  
                      int nowflow=dfs(v,min(weight[p],f));  
                      if (nowflow)  
                      {  
                        weight[p]-=nowflow;  
                        weight[p^1]+=nowflow;  
                        return nowflow;  
                      }  
                }  
            }  
            return 0;  
        }  
        int max_flow(int s,int t)  
        {  
            int flow=0;  
            while(SPFA(s,t))  
            {  
                For(i,n) iter[i]=pre[i];  
                int f;  
                while (f=dfs(s,INF))  
                    flow+=f;   
            }  
            return flow;  
        }   
        void mem(int n,int s,int t)    
        {    
            (*this).n=n;  
            (*this).t=t;    
            (*this).s=s;    
              
            size=1;    
            MEM(pre)   
        }    
    }S;    
    
    int n,m;
    
    int main()
    {
    //	freopen("poj3469.in","r",stdin);
    //	freopen(".out","w",stdout);
    	
    	scanf("%d%d",&n,&m);
    	
    	int s=1,t=n+2;
    	S.mem(n+2,s,t); 
    	For(i,n)
    	{
    		int ai,bi;
    		scanf("%d%d",&ai,&bi);
    		S.addedge2(i+1,t,ai);
    		S.addedge2(s,i+1,bi);
    	}
    	
    	For(i,m)
    	{
    		int a,b,w;
    		scanf("%d%d%d",&a,&b,&w);
    		S.addedge(a+1,b+1,w);
    		S.addedge(b+1,a+1,w);
    	}
    	
    	cout<<S.max_flow(s,t)<<endl;
    	
    	
    	return 0;
    }
    





  • 相关阅读:
    摄像头距离标定方法研究(得到像素和毫米的转换比)
    mfc通过消息传递参数进行程序间通信
    基于Opencv和Mfc的图像处理增强库GOCVHelper(索引)
    【20160924】GOCVHelper MFC增强算法(4)
    【20160924】GOCVHelper 图像处理部分(3)
    Xamarin Essentials教程使用指南针Compass
    Xamarin Essentials教程使用加速度传感器Accelerometer
    XamarinSQLite教程下载安装SQLite/SQL Server Compact Toolbox
    Xamarin Essentials教程屏幕常亮ScreenLock
    Xamarin Essentials教程振动Vibration
  • 原文地址:https://www.cnblogs.com/slgkaifa/p/6851706.html
Copyright © 2011-2022 走看看