`
huyifan951124
  • 浏览: 82753 次
社区版块
存档分类
最新评论

NYOJ 哭泣天使 sap求最大流

 
阅读更多

题目大意:中文题。

算法思路:因为他是网格,所以我们把将每一行看成点,将每一列看成点,将行与超级源点连接,行再与列相连接,列再与超级会点相连,求最大流即可。

#include<bits/stdc++.h>
using namespace std;
#define INF 0xfffffff
#define MAXN 600
int t;
int m,n,sum1,sum2,src,sink;
int a[MAXN],b[MAXN];
int maps[MAXN][MAXN],pre[MAXN],level[MAXN];
int gap[MAXN];

int sap(int s,int t)
{
   memset(pre,-1,sizeof(pre));
    memset(level,0,sizeof(level));
    memset(gap,0,sizeof(gap));
    gap[0]=t+1;
    int u=s,ans(0);
    while(level[s]<t+1)
    {
        int v;
        for(v=0;v<=t;v++)
        {
            if(maps[u][v]>0 && level[u]==level[v]+1)
                break;
        }
        if(v<=t)
        {
            pre[v]=u;
            u=v;
            if(v==t)
            {
                int minflow=INF;
                for(int i=v;i!=s;i=pre[i])
                    if(minflow>maps[pre[i]][i])
                        minflow=maps[pre[i]][i];
                ans+=minflow;
                for(int i=v;i!=s;i=pre[i])
                {
                    maps[pre[i]][i]-=minflow;
                    maps[i][pre[i]]+=minflow;
                }
                u=s;
            }
        }
        else
        {
            int mindis=t+10;
            for(int i=0;i<=t;i++)
            {
                if(maps[u][i]>0 && mindis>level[i]+1)
                    mindis=level[i]+1;
            }
            --gap[level[u]];
            if(gap[level[u]]==0) return ans;
            level[u]=mindis;
            gap[mindis]++;
            if(u!=s) u=pre[u];
        }
    }
    return ans;
}
int main()
{


    scanf("%d",&t);
    while(t--)
    {
        memset(maps,0,sizeof(maps));
        memset(a,0,sizeof(a));
        memset(b,0,sizeof(b));
        sum1=0;
        sum2=0;
        scanf("%d%d",&m,&n);
        for(int i=1;i<=m;i++)
        {
            scanf("%d",&a[i]);
            sum1+=a[i];
        }
        for(int i=1;i<=n;i++)
        {
            scanf("%d",&b[i]);
            sum2+=b[i];
        }
        if(sum1!=sum2)
        {
             printf("Terrible\n");
             continue;
        }

            src=0;
            sink=n+m+1;
          
            for(int i=1;i<=m;i++)
            {
                maps[src][i]=a[i];
                for(int j=1;j<=n;j++)
                {
                    maps[i][j+m]=1;
                    if(i<2)
                        maps[m+j][sink]=b[j];
                }
            }


        int ans=sap(src,sink);
        if(sum1!=ans)
            printf("Terrible\n");
        else
            printf("Not Sure\n");

    }
    return 0;


}


        

 

0
1
分享到:
评论

相关推荐

    nyoj部分ACM答案

    这里引入了两个常用的头文件:`iostream`用于处理标准输入输出流,而`stdio.h`则是C语言的标准输入输出库,通常用于处理文件输入输出操作,在这里主要是为了使用`scanf`函数读取输入数据。 ##### 命名空间 ```cpp ...

    ACM在线评测系统 NYOJ 题库 离线看题网页版 nyoj

    NYOJ,全称为南阳理工学院在线评测系统(Nanyang Institute of Technology Online Judge),是为ACM(国际大学生程序设计竞赛)以及其他编程爱好者提供的一种在线编程练习平台。该系统支持用户提交代码并进行实时...

    NYOJ题目 离线版

    NYOJ(New York Online Judge)是一个在线编程竞赛平台,主要面向ACM(国际大学生程序设计竞赛)的参与者。这个离线版包含了NYOJ的所有题目,为编程爱好者和参赛者提供了一个方便的本地化练习环境。通过爬虫技术,...

    nyoj16.rar_site:www.pudn.com

    标题中的“nyoj16.rar”可能是指一个编程竞赛或者在线判题系统(如NOIP、NYOJ)的问题编号16的题目,而“site:www.pudn.com”通常用于搜索引擎查询,表明这个压缩文件可能来源于PUDN(普渡大学电子论坛)这个网站。...

    ACM题库题库啊

    NYOJ,全称New York Online Judge,是一个在线编程竞赛平台,提供了丰富的ACM竞赛训练题目。离线版的NYOJ可能是将该平台的部分内容打包成CHM文件,方便用户在没有网络的情况下查阅和练习。这个CHM文件可能包含题目的...

    算法-矩形嵌套(NYOJ-16)(包含源程序).rar

    《算法-矩形嵌套(NYOJ-16)》是针对计算机科学中的一个典型问题进行探讨的资源包,其中包含了解决该问题的源程序。这个问题涉及到数据结构、图论以及算法设计等多个核心领域,是编程竞赛或算法学习中的常见题目。在...

    nyoj 61 传纸条(一)

    双线程动态规划问题,很值得练习。传一个ac代码,测试一下csdn的功能。

    NYOJ.290.DictionaryTree.zip_trie树c_字典树_高级数据结构

    在NYOJ.290.DictionaryTree.cpp文件中,可能包含了以下内容: 1. `TrieNode`结构体定义,用于表示Trie树的节点。 2. 插入函数,如`insert(char *str)`,用于将字符串插入到Trie树中。 3. 查询函数,如`search(char *...

    经典动态规划 南阳104最大和

    给定一个由整数组成二维矩阵(r*c),现在需要找出它的一个子矩阵,使得这个子矩阵内的所有元素之和最大,并把这个子矩阵称为最大子矩阵。

    nyoj_lvy实战开发系列《三》: 获取城市信息

    由于微信小程序没有方法可以获得当前用户所在城市的信息,所以需要调用方法来获取城市信息,用了两个方法去发送请求并返回城市信息  1. @Controller public class WechatLocationManager { private Logger logger ...

    nyoj_lvy实战开发系列《二》: 微信端开发:登录小程序

    这个小程序的主要目的是为了用户用微信的用户信息登录后将用户信息授权存入自己的数据库中,这样以后每次微信登录得到的code 所得到的 openid 可以在项目的数据库中查到该用户的相关信息。 在测试的过程中,需要用户...

    nyoj_lvy实战开发系列《一》:发送JSON信息,加密数据解密算法,UnionID机制说明

    前期小程序开发只进行到根据微信用户登录获取的code 去微信的API去获取到该用户的openId和session_key,到了第二阶段,老大让我重写OAuthManager的代码来实现微信小程序和微信公众号平台获取用户信息的优化,即将...

    南阳理工oj stl练习ac代码

    NYOJ(南阳理工在线判题系统)是南阳理工学院开发的OJ平台,它提供编程题目的提交和评测服务,帮助学生提升编程技能。在这个平台上,用户可以通过提交代码并获取反馈来检验自己对STL的理解和应用。 在STL的练习...

    南阳理工学院OJ第1版解题报告V1.0.pdf

    贪心算法的应用案例,优先选用半径较大的喷水器,确保最大效率。这种策略在资源分配或成本优化问题中十分常见。 #### 7. 街区最短路径问题 此题可以通过暴力枚举邮局位置求解,但最优解法是利用中位数特性来确定...

Global site tag (gtag.js) - Google Analytics