点击打开链接

哭泣天使

时间限制:1000 ms  |  内存限制:65535 KB
难度:5
描述

Doctor Who乘着Tardis带着Amy来到了一个星球,一开Tadis大门,发现这个星球上有个壮观的石像群,全是一些天使石像,有的石像在哭泣,有的石像像在微笑,共有m行n列,Doctor用“音速起子”扫描了一下整个石像群,得到了每行天使中在哭泣的天使的个数。当他与Amy在这里行走了一段时间之后,Doctor忽然想起了什么,怀疑这些石像是不是传说中的一种黑暗生物——“哭泣天使”——一种看似石像,却会在人不看它的时候移动,会强制把人送回某个过去的时间点,并借此汲取时间能量的生物。Doctor可不想自己和Amy迷失在一个未知的时间点里,于是Doctor立刻用“音速起子”又扫描了整个石像群,想再看看每行的在哭泣的天使个数与刚才是否相符,但是,越急就越容易出错,他一不小心扫描错了,扫描出了每列中哭泣的天使的个数。现在,由于音速起子的能量不足了,他不能够再次扫描,他想根据已有的数据判断出是否有天使改变了自己的表情,从哭泣变成不哭泣或者从不哭泣变成哭泣了。

输入
第一行是一个整数T,表示共有T组测试数据(T<=50)
每组测试数据第一行是两个整数m,n(0<m,n<=300)分别表示行数和列数
随后的两行分别有m个数和n个数分别表示对应m行中哭泣的天使石像的个数与对应n个列中哭泣的天使石像的个数。
输出
如果能根据已有信息判断出必然有石像改变了表情,则输出Terrible
如果根据已有信息无法确定石像发生了改变,则输出Not Sure (有时,你确定两次扫描时状态相同,但由于不确定之间是否发生过改变,故也输出Not Sure)
样例输入
2
2 3
1 1
1 1 0
3 3
0 1 2
3 0 0
样例输出
Not Sure
Terrible

这个题是一个二分图最大流问题,每行是一个点,列是一个点,那么左边的点全是行,右边的点全是列,所以每个行节点都有一条连向每个列节点的边,容量为1(某行某列就确定这个点了)人为添加一个源点和一个汇点,假如第 i 行的和为sum 那么源点流向编号为 i 的行节点的容量为sum,假如第 j 列的和为sum,那么第j个列节点流向汇点的容量为sum,这样就转化成了在图上求最大流的问题,如果求出来的最大流不等于题目输入时哭泣天使的总数,那么说明有天使改变了状态,输出Terrible,否则输出Not Sure,另外,如果输入的数据行和列的和都不一样,那么不需要判断,必然有天使改变状态,直接输出Terrible;

一开始最大流直接套用的书上的dinic算法,结果超时,以为这个题不能用最大流做,后来在网上找到了另一个模板,110MS过了,而且放在“月老的难题”那个题中也比之前的最大流模板快150MS,看来上交的模板也不见得就一定好嘛,但是现在这个网络流模板的正确性还有需要进一步验证,没有了深搜和广搜,看不太懂怎么求出来的增广路的,反正觉得这个人挺厉害的,也是因为我比较菜,对网络流这方面理解不深入。上代码

#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;int min(int a, int b)
{return a > b ? b : a;
}const int inf = 0xfffffff;
#define clr(arr,v) memset(arr,v,sizeof(arr))template<int MaxV,int MaxE>
class MaxFlow{
public:int GetMaxFlow(int s,int t,int n)  //n±íʾÓÐn¸öµã£¬sΪԴµã£¬tΪ»ãµã {int maxflow = 0,minflow = inf,cur = s;Cnt[0] = n;memcpy(Cur,H,sizeof(H));while(Gap[cur] <= n){int &i = Cur[cur];for(;i != -1;i = Next[i]){if(Cap[i]-Flow[i] > 0 && Gap[cur]-Gap[ Num[i] ] == 1){pre_edge[ Num[i] ] = i;cur = Num[i];minflow = min(minflow,Cap[i]-Flow[i]);if(cur == t){maxflow += minflow;while(cur != s){Flow[ pre_edge[cur] ] += minflow;Flow[ pre_edge[cur]^1 ] -= minflow;cur = Num[ pre_edge[cur]^1 ];}minflow = inf;}break;}}if(i == -1){if(--Cnt[ Gap[cur] ] == 0) return maxflow;Gap[cur] = inf;i = H[cur];for(int j = H[cur];j != -1;j = Next[j])if(Cap[j] > Flow[j] && Gap[ Num[j] ] < Gap[cur])Gap[cur] = Gap[ Num[j] ];if(Gap[cur] != inf) ++Cnt[ ++Gap[cur] ];cur = s;}}return maxflow;}void add(int u,int v,int flow){Num[pos] = v;Cap[pos] = flow;Next[pos] = H[u];H[u] = pos++;Num[pos] = u;Cap[pos] = 0;Next[pos] = H[v];H[v] = pos++;}void clear(){clr(H,-1); clr(Flow,0); clr(Cnt,0);clr(Gap,0); pos = 0;}
private:int H[MaxV],Cur[MaxV],Num[MaxE],Next[MaxE];int Cap[MaxE],Flow[MaxE],Cnt[MaxV];int Gap[MaxV],pre_edge[MaxE],pos;
};MaxFlow<700,200000> g;int main()
{
//  freopen("test.txt", "r", stdin);int t;scanf("%d", &t);while(t--){g.clear();int m, n;scanf("%d%d", &m, &n);int i;int num;int sum1, sum2;sum1 = sum2 = 0;for(i = 1; i < m + 1; i++){scanf("%d", &num);sum1 += num ;g.add(0, i, num);int j;for(j = 0; j < n; j++){g.add(i, j + m + 1, 1);}}for(i = m + 1; i < m + n + 1; i++){scanf("%d", &num);sum2 += num;g.add(i, m + n + 1, num);}if(sum1 != sum2)printf("Terrible\n");else if(g.GetMaxFlow(0, m + n + 1, m + n + 2) != sum1)printf("Terrible\n");elseprintf("Not Sure\n");
//      cout<<g.GetMaxFlow(0, m + n + 1)<<endl;}return 0;
}

NYOJ 489-哭泣天使:最大流相关推荐

  1. 《网络流学习笔记04 NYOJ 489 哭泣天使(建边,超级源点和汇点)》

    链接:click here 题意描述: 哭泣天使 时间限制: 1000 ms  |  内存限制: 65535 KB 难度: 5 描述 Doctor Who乘着Tardis带着Amy来到了一个星球,一开 ...

  2. NYIST 489 哭泣天使

    哭泣天使 时间限制:1000 ms | 内存限制:65535 KB 难度:5 描述 Doctor Who乘着Tardis带着Amy来到了一个星球,一开Tadis大门,发现这个星球上有个壮观的石像群,全 ...

  3. 中情局窃密手段曝光:“哭泣天使”能让电视假关机变成窃听器

    "维基揭秘"公布了近9000份文件 披露中情局层出不穷的窃密手段 3月7日,"维基揭秘"网站公布大量文件,披露美国中央情报局不仅通过黑客软件攻入个人手机.电视甚 ...

  4. 新型智能电视攻击,9成国外设备或受影响

    在近日举办的欧洲广播联盟媒体网络安全研讨会上,瑞士安全研究员Rafael Scheel分享了一种针对智能电视的新型攻击方法:通过发送恶意数字视频地面广播信号(DVB-T),实现远程控制电视设备并获得智 ...

  5. 【HDOJ图论题集】【转】

    1 =============================以下是最小生成树+并查集====================================== 2 [HDU] 3 1213 How ...

  6. 不要让开源成为贸易战的牺牲品!

    贸易战引发了开源命运讨论的问题.但是现在,是时候团结起来,保护开发者最珍视的自由了! 作者 | Bunnie 译者 | 苏本如,责编 | 郭芮 出品 | CSDN(ID:CSDNnews) 以下为译文 ...

  7. 午夜之后的暗杀者 维基解密又公布CIA的两个Windows恶意软件框架 主要用于监控及执行命令...

    当全球忙于应对自动传播的WannaCry勒索软件所带来的威胁时 ,维基解密发布了"Vault 7"(第七号保险库)的新一轮中央情报局(CIA)机密信息,详细介绍了CIA明显针对微软 ...

  8. 二十一世纪大学英语读写基础教程学习笔记(原文)——8 - Young and in Love(超年轻恋人)

    Unit 8 - Young and in Love(超年轻恋人) When a seven-year-old boy declared that he had fallen in love with ...

  9. (流式、lambda、触发器)实时处理大比拼 - 物联网(IoT)\金融,时序处理最佳实践

    标签 PostgreSQL , 物联网 , 传感器 , lambda , 调度 , 实时 , 流式更新 , UPSERT , insert on conflict do update 背景 越来越多的 ...

最新文章

  1. ICE专题:ICE起步
  2. linux下的sort、uniq、join的使用
  3. 环形动画加载视图AnimatedCircleLoadingView
  4. Android中应用安装分析
  5. Android和ios速度,不拼硬件拼体验 Android和iOS系统的加载速度测验
  6. 空指针:从 0 到 NULL,再到 nullptr
  7. 如何获取e.printStackTrace()的内容
  8. 【工程项目经验】mac电脑lldb调试工具
  9. Redis集群(二)Sentinel哨兵模式
  10. 读书札记:Fiddler--中文版(本人自己汉化的)下载
  11. 一个简短的指南的iOS越狱及原因
  12. 简练网软考知识点整理-项目需求跟踪及需求跟踪矩阵
  13. Python(初学者):调用函数输出
  14. web前端工程师眼中的母亲节
  15. msf介绍及其常用模块
  16. SpringCloud整合Feign和Nacos报错:No Feign Client for loadBalancing defined. Did you forget to include?
  17. Google手机操作系统Android将100%开源
  18. DDD兴起的原因,以及与微服务的关系
  19. Python技法之简单递归下降Parser的实现方法
  20. JAVA练习题8:遍历数组求和,求平均值以及比平均值小的数据

热门文章

  1. Excel办公常用函数:6大类型,共计64个!
  2. pytorch入门学习(四)-----计算图与动态图
  3. 我想自学php但是网上视频很不连贯,ThinkPHP - 连贯操作
  4. 巧用计算机方法,第四课 巧用计算器教案.doc
  5. C语言数组初始化为非0值
  6. MAC环境下生成Apple证书教程
  7. css动画实现跳动的小人
  8. 远程控制软件如何实现两台电脑连接
  9. 多台树莓派配置自组织网络,batman-adv开源项目具体配置过程
  10. 休闲互动游戏有哪些?互动游戏对战平台是什么?