• 【Poj 1149】PIGS


    加个超赞的题解!http://ycool.com/post/zhhrrm6
    简直! 我居然会把数据范围搞错!

    明明定义全局变量s,t又在main()里面int了一遍 导致死循环!

    #include <cstdio>
    #include <iostream>
    #include <algorithm>
    #include <cstring>
    #define INF 100000000
    using namespace std;
    
    int m,n;
    bool b[101][1001];
    bool f[1001];
    int g[110][110];
    int house[1001];
    
    int team[110],head,tail;
    int d[110];
    int s,t; 
    bool bfs()
    {
    	head=tail=0;
    	memset(d,0,sizeof(d));
    	team[++tail]=s;
    	d[s]=1;
    	while(head<tail)
    	{
    		int x=team[++head];
    		for(int i=1;i<=n;i++)
    			if(d[i]==0&&g[x][i]!=0)
    				d[i]=d[x]+1,team[++tail]=i;
    	}
    	if(d[t]==0) return false;
    	else        return true;
    }
    int dfs(int x,int mmin)
    {
    	int tmp;
    	if(x==t) return mmin;
    	for(int i=1;i<=n;i++)
    		if(d[i]==d[x]+1&&g[x][i]!=0&&(tmp=dfs(i,min(mmin,g[x][i]))))
    		{
    			g[x][i]-=tmp;
    			g[i][x]+=tmp;
    			return tmp;
    		}
    	return  0;
    }
    int main()
    {
    	scanf("%d %d",&m,&n);
    	s=n+1,t=n+2;
    	for(int i=1;i<=m;i++) scanf("%d",&house[i]);
    	for(int i=1;i<=n;i++)
    	{
    		int tmp;scanf("%d",&tmp);
    		for(int x,j=1;j<=tmp;j++)
    		{
    			scanf("%d",&x);
    			b[i][x]=true;
    			if(!f[x])
    				g[s][i]+=house[x],f[x]=true;
    			else 
    				for(int k=1;k<i;k++) if(b[k][x]) g[k][i]=INF;
    		}
    		scanf("%d",&g[i][t]);
    	}
    	n+=2;
    	int ans=0;
    	while(bfs()) ans+=dfs(s,INF);
    	printf("%d",ans);
    	return 0;
    }
    
  • 相关阅读:
    深度拾遗(06)
    非平衡数据处理
    深度拾遗(05)
    深度拾遗(00)
    深度拾遗(04)
    深度拾遗(03)
    深度拾遗(02)
    js继承方式
    js带缩略图的图片切换效果
    获取SQL Server数据库中的表和字段描述
  • 原文地址:https://www.cnblogs.com/ofsxb/p/5102430.html
Copyright © 2020-2023  润新知