poj 3281 Dinicing

简介:

    简单建图,source->food->cow1->cow2->drink->collection

    一开始数组开小了一直TLE,居然不是RE……

/*
author:jxy
lang:C/C++
university:China,Xidian University
**If you need to reprint,please indicate the source**
*/
#include <iostream>
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <queue>
#define INF 1E9
using namespace std;
#define maxn 405
#define maxm 160005
int d[maxn],first[maxn],cur[maxn],cnt;
struct edge
{
    int v,c,f,next;
    edge(int &a,int &b,int cc):v(b),c(cc),f(0)
    {
        next=first[a];
        first[a]=cnt++;
    }
    edge(){};
}e[maxm];
inline void addedge(int v,int u,int c)
{
    e[cnt]=edge(v,u,c);
    e[cnt]=edge(u,v,0);
}
queue<int> q;
int vis[maxn];
int S,E;

int bfs()
{
    int v,u;
    memset(vis,0,sizeof(vis));
    while(!q.empty())q.pop();
    q.push(S);
    d[S]=0;vis[S]=1;
    while(!q.empty())
    {
        v=q.front();q.pop();
        for(int i=first[v];~i;i=e[i].next)
        {
            u=e[i].v;
            if(!vis[u]&&e[i].c>e[i].f)
            {
                vis[u]=1;
                q.push(u);
                d[u]=d[v]+1;
            }
        }
    }
    return vis[E];
}
int dfs(int v,int re)
{
    if(v==E||re==0)return re;
    int f=0,u,t;
    for(int &i=cur[v];~i;i=e[i].next)
    {
        u=e[i].v;
        if(d[v]+1==d[u]&&(t=dfs(u,min(re,e[i].c-e[i].f)))>0)
        {
            e[i].f+=t;e[i^1].f-=t;
            f+=t;re-=t;
            if(!re)break;
        }
    }
    return f;
}
int main()
{
    int n,F,D;
    while(~scanf("%d%d%d",&n,&F,&D))
    {
        memset(first,-1,sizeof(first));
        cnt=0;
        int i,j,a,b,t=F+D;
        S=0,E=2*n+F+D+1;
        for(i=1;i<=F;i++)
            addedge(0,i,1);
        for(i=F+1;i<=t;i++)
            addedge(i,E,1);
        for(i=t+n+1;i<E;i++)
            addedge(i-n,i,1);
        for(i=1;i<=n;i++)
        {
            scanf("%d%d",&a,&b);
            while(a--)
            {
                scanf("%d",&j);
                addedge(j,i+t,1);
            }
            while(b--)
            {
                scanf("%d",&j);
                addedge(i+t+n,F+j,1);
            }
        }
        int ans=0;
        while(bfs())
        {
            for(int i=0;i<=E;i++)
               cur[i]=first[i];
            ans+=dfs(S,INF);
        }
        printf("%d\n",ans);
    }
}


目录
相关文章
|
Java 数据管理 关系型数据库
机票预订系统(java+mysql+navicat)
机票预订系统(java+mysql+navicat)
机票预订系统(java+mysql+navicat)
|
10月前
|
数据管理 数据处理 数据库管理
数据管理DMS上线托管Dify免费邀测中
数据管理DMS支持托管Dify,提供从Notebook开发、数据处理、模型构建到大模型应用开发的一站式Data+AI集成解决方案。借助Dify平台,简化企业智能化落地流程,了解更多详情,请访问[官方文档](https://help.aliyun.com/zh/dms/dify-invited-test/)。
|
9月前
|
机器学习/深度学习 人工智能 算法
《AI赋能鸿蒙Next,开启智能关卡设计新时代》
在游戏开发中,关卡设计至关重要。借助鸿蒙Next系统和AI技术,通过学习玩家行为、自动生成内容、自适应难度调整、优化布局与流程及增强互动性,可实现个性化、多样化的智能关卡设计,提升沉浸感和趣味性,同时提高开发效率与质量。然而,开发者需关注数据安全与算法偏见等问题,确保AI与游戏的深度融合。
187 3
|
11月前
|
安全 自动驾驶 物联网
5G技术概览:开启万物互联新时代
【10月更文挑战第23天】
415 1
|
12月前
|
安全 新能源 知识图谱
固态电池:电动汽车的能源革新
【10月更文挑战第15天】固态电池凭借其高能量密度、长续航、卓越安全性和快速充电等优势,正引领新能源汽车领域的技术革命。本文详细探讨了固态电池的技术特点、优势及其对电动汽车产业的影响,展示了其在提升续航里程、增强安全性和降低成本方面的巨大潜力。随着技术的不断进步和成本的降低,固态电池有望成为推动电动汽车行业发展的关键力量,开启一个更加绿色高效的交通新时代。
|
监控 安全 Ubuntu
在Linux中,如何进行SSH服务配置?
在Linux中,如何进行SSH服务配置?
|
数据采集 运维 监控
ARMS自定义监控
【8月更文挑战第25天】
348 3
|
12月前
|
供应链 安全 物联网
深入理解区块链技术的核心原理与应用前景
【10月更文挑战第6天】深入理解区块链技术的核心原理与应用前景
531 0
|
5G Android开发 iOS开发
探索iOS与安卓在移动操作系统领域的技术竞争与合作
本文将深入探讨iOS和安卓这两大移动操作系统的技术竞争与合作。通过对市场份额、用户忠诚度、技术创新、生态系统建设以及安全性等方面的比较,我们将揭示这两个系统各自的优势和挑战。同时,我们还将分析它们如何通过技术合作来推动整个移动行业的发展。
215 31
|
网络协议 Linux 网络安全
linux中跟踪路由命令,Linux命令:traceroute命令(路由跟踪)
【8月更文挑战第3天】traceroute是用来检测发出数据包的主机到目标主机之间所经过的网关数量的工具
593 5