zoukankan      html  css  js  c++  java
  • 【CodeVS 1028】 花店橱窗布置

    费用流

    然而并不会 看了很多ppt blog 都讲得很模糊! 并不懂
    比着 代码 码了一遍....

    一个<打成<=,RE了半天!!!

    #include <cstdio>
    #include <cstring>
    #define Inf 100000
    using namespace std;
    int f,v;
    int s,t;
    int n;
    int g[2030][2030]; int fa[2030];
    int c[2030][2030];
    int team[203000],head,tail; 
    bool b[2030];
    int d[2030];
    
    bool spfa()
    {
    	head=tail=0;
    	memset(b,false,sizeof(b));
    	for(int i=1;i<=n;i++) d[i]=-Inf;
    	team[++tail]=s; b[s]=true; d[s]=0;
    	while(head<tail)
    	{
    		int x=team[++head]; b[x]=false;
    		for(int i=1;i<=n;i++)
    			if(c[x][i]&&d[i]<g[x][i]+d[x])
    			{
    				d[i]=d[x]+g[x][i];
    				fa[i]=x;
    				if(!b[i]) team[++tail]=i,b[i]=true;
    			}
    	}	
    	if(d[t]==-Inf) return false;
    	return true;
    }
    
    int main()
    {
    	scanf("%d%d",&f,&v);
    	for(int i=1;i<=f;i++)
    		for(int j=1;j<=v;j++)
    		{
    			scanf("%d",&g[i][j+f]);
    			g[j+f][i]=-g[i][j+f];
    			c[i][j+f]=1;
    		}	
    	n=f+v;s=n+1;t=n+2;
    	for(int i=1;i<=f;i++) c[s][i]=1;
    	for(int i=1;i<=v;i++) c[i+f][t]=1;
    
    	n+=2;
    	int ans=0;
    	while(spfa())
    	{		
    		
    		int tmp=t;
    		while(tmp!=s)
    		{
    			ans+=g[fa[tmp]][tmp];
    			c[fa[tmp]][tmp]-=1;
    			c[tmp][fa[tmp]]+=1;
    			tmp=fa[tmp];
    		}
    	}
    	printf("%d\n",ans);
    	return 0;
    }
    
  • 相关阅读:
    PS的使用[未完待续]
    Navicat破解方法【很靠谱】
    some blogs
    Linux curl命令详解
    api_automation_mysql
    linux 笔记
    pytest 笔记
    sel+python 基础
    postman 断言
    homebrew note
  • 原文地址:https://www.cnblogs.com/ofsxb/p/5104544.html
Copyright © 2011-2022 走看看