1614: 刘备闯三国之三顾茅庐(二)

Time Limit: 1000 MS  Memory Limit: 128 MB
Submit: 15  Solved: 5
[Submit][Status][Web Board]

Description

刘备(161年-223年6月10日),字玄德,东汉末年幽州涿郡涿县,西汉中山靖王刘胜的后代。刘备一生极具传奇色彩,早年颠沛流离、备尝艰辛最终却凭借自己的谋略终成一方霸主。那么在那个风云激荡的年代,刘备又是如何从一个卖草鞋的小人物一步一步成为蜀汉的开国皇帝呢?让我们一起拨开历史的迷雾,还原一个真实的刘备。

       公元207年冬至,当时驻军新野的刘备在徐庶的建议下,到南阳卧龙岗拜访诸葛亮。这是刘备第二次拜访诸葛亮的故事。三国演义记载的事,由于诸葛亮被朋友邀请不在家中,刘备再次无功而返。然而据我翻阅古籍发现:其实诸葛亮是抛出了如下的问题,想考察刘备本人的谋略、以确定其是否是自己要效忠的那个人:

这是关于战斗的题目。首先我们将战场分割成n*m个区域,诸葛亮每次可以指挥一只军队占领某一行连续的几个格子或者某一列连续的几个格子。诸葛亮会进行q次操作,他想知道每一次操作后,战场被分割成了几个区域?

刘备为人英明神武,但对此类问题也是束手无策,所以这个任务又要交给刘备身边的小跟班——也就是你来解决了。

Input

第一行包含3个整数n,m,q(1<=n,m<=1000,1<=q<=10000)。

接下来有q行,每一行包括4个整数x1,x2,y1,y2(保证有x1=x2或者y1=y2),表示诸葛亮将派遣军队占领(x1,y1)到(x2,y2)这一行/列的区域。

Output

对于每一次操作,输出当前战场被分割成几个区域。

初始时,战场为1个区域。

Sample Input

4 6 5
2 2 2 6
1 3 4 3
2 5 3 5
4 6 4 6
1 6 4 6

Sample Output

1
3
3
4
3

HINT

样例每一次操作后的战场如下:

Source

by cjf

[Submit][Status][Web Board]

题目链接:

  http://acm.xmu.edu.cn/JudgeOnline/problem.php?id=1614

题目大意:

  一个N*M的矩形网格,Q个操作,每次操作会输入x1 y1 x2 y2,使(x1,y1)到(x2,y2)的成为障碍(保证x1=x2 或y1=y2,为一行或一列的连续格子)

  问每次操作后网格内的联通块数量(不含障碍)。

题目思路:

  【逆向思维+二维并查集】

  首先将问题反过来做,每次删去一些障碍,求联通块数量。

  先将所有数据读入,之后用二维并查集统计联通块数量。

  接下来每次都可能删除某些障碍,将新的方格看作新的联通块,然后判断是否会让之前的联通块连通,增减答案。

  最后正序输出答案即可。

/****************************************************Author : CoolxxxCopyright 2017 by Coolxxx. All rights reserved.BLOG : http://blog.csdn.net/u010568270****************************************************/
#include<bits/stdc++.h>
#pragma comment(linker,"/STACK:1024000000,1024000000")
#define abs(a) ((a)>0?(a):(-(a)))
#define lowbit(a) (a&(-a))
#define sqr(a) ((a)*(a))
#define mem(a,b) memset(a,b,sizeof(a))
const double EPS=1e-8;
const int J=10;
const int MOD=100000007;
const int MAX=0x7f7f7f7f;
const double PI=3.14159265358979323;
const int N=1004;
const int M=10004;
using namespace std;
typedef long long LL;
double anss;
LL aans;
int cas,cass;
int n,m,lll,ans;
int num[N][N],sz[N][N];
int fa[N][N][2];
int f[M];
int dx[]={-1,0,1,0};
int dy[]={0,1,0,-1};
struct xxx
{int x1,y1,x2,y2;
}q[M];
void zhao(int x,int y,int &fx,int &fy)
{if((fa[x][y][0]==x && fa[x][y][1]==y) || (!fa[x][y][0] && !fa[x][y][1])){fx=x,fy=y;return;}zhao(fa[x][y][0],fa[x][y][1],fx,fy);fa[x][y][0]=fx;fa[x][y][1]=fy;
}
void print()
{int i,j;for(i=1;i<=n;i++){for(j=1;j<=m;j++)printf("%d ",num[i][j]);puts("");}puts("");for(i=1;i<=n;i++){for(j=1;j<=m;j++)printf("%d,%d ",fa[i][j][0],fa[i][j][1]);puts("");}puts("");for(i=1;i<=n;i++){for(j=1;j<=m;j++)printf("%d ",sz[i][j]);puts("");}puts("");
}
int main()
{#ifndef ONLINE_JUDGEfreopen("1.txt","r",stdin);
//  freopen("2.txt","w",stdout);#endifint i,j,k;int x,y,z;
//  for(scanf("%d",&cass);cass;cass--)
//  for(scanf("%d",&cas),cass=1;cass<=cas;cass++)
//  while(~scanf("%s",s))while(~scanf("%d",&n)){mem(num,0);mem(sz,0);mem(fa,0);mem(f,0);scanf("%d%d",&m,&cass);for(i=1;i<=cass;i++){scanf("%d%d%d%d",&q[i].x1,&q[i].y1,&q[i].x2,&q[i].y2);if(q[i].x1==q[i].x2){if(q[i].y1>q[i].y2)swap(q[i].y1,q[i].y2);for(j=q[i].y1;j<=q[i].y2;j++)num[q[i].x1][j]++;}else{if(q[i].x1>q[i].x2)swap(q[i].x1,q[i].x2);for(j=q[i].x1;j<=q[i].x2;j++)num[j][q[i].y1]++;}}for(i=1;i<=n;i++){for(j=1;j<=m;j++){for(k=0;k<4;k++){x=i+dx[k];y=j+dy[k];if(x<1 || x>n || y<1 || y>m || num[i][j] || num[x][y])continue;int fx1,fy1,fx2,fy2;zhao(i,j,fx1,fy1);zhao(x,y,fx2,fy2);if(fx1==fx2 && fy1==fy2)continue;fa[fx2][fy2][0]=fx1;fa[fx2][fy2][1]=fy1;}}}for(i=1;i<=n;i++){for(j=1;j<=m;j++){zhao(i,j,fa[i][j][0],fa[i][j][1]);if(!sz[fa[i][j][0]][fa[i][j][1]] && !num[i][j])f[cass+1]++;sz[fa[i][j][0]][fa[i][j][1]]++;}}for(i=cass;i>1;i--){f[i]=f[i+1];if(q[i].x1==q[i].x2){for(j=q[i].y1;j<=q[i].y2;j++){num[q[i].x1][j]--;if(num[q[i].x1][j]==0){f[i]++;for(k=0;k<4;k++){x=q[i].x1+dx[k];y=j+dy[k];if(x<1 || x>n || y<1 || y>m || num[x][y])continue;int fx1,fy1,fx2,fy2;zhao(q[i].x1,j,fx1,fy1);zhao(x,y,fx2,fy2);if(fx1==fx2 && fy1==fy2)continue;fa[fx2][fy2][0]=fx1;fa[fx2][fy2][1]=fy1;f[i]--;}}}}else{for(j=q[i].x1;j<=q[i].x2;j++){num[j][q[i].y1]--;if(num[j][q[i].y1]==0){f[i]++;for(k=0;k<4;k++){x=j+dx[k];y=q[i].y1+dy[k];if(x<1 || x>n || y<1 || y>m || num[x][y])continue;int fx1,fy1,fx2,fy2;zhao(j,q[i].y1,fx1,fy1);zhao(x,y,fx2,fy2);if(fx1==fx2 && fy1==fy2)continue;fa[fx2][fy2][0]=fx1;fa[fx2][fy2][1]=fy1;f[i]--;}}}}}for(i=2;i<=cass+1;i++)printf("%d\n",f[i]);//print();}return 0;
}
/*
////
*/

XMU 1614 刘备闯三国之三顾茅庐(二) 【逆向思维+二维并查集】相关推荐

  1. XMU 1617 刘备闯三国之汉中之战 【BFS+染色】

    1617: 刘备闯三国之汉中之战 Time Limit: 1000 MS  Memory Limit: 128 MB Submit: 6  Solved: 5 [Submit][Status][Web ...

  2. XMU 1611 刘备闯三国之卖草鞋 【贪心】

    1611: 刘备闯三国之卖草鞋 Time Limit: 1000 MS  Memory Limit: 64 MB Submit: 89  Solved: 47 [Submit][Status][Web ...

  3. 2372: 连通块(blocks) 个人认为二维并查集为什么TLE?

    题目链接:http://acm.upc.edu.cn/problem.php?id=2372 2372: 连通块(blocks) Time Limit: 1 Sec  Memory Limit: 64 ...

  4. 基础数据结构(二):字典树、并查集、堆、哈希表、字符串的哈希方式、STL的常见容器及其接口

    文章目录 一.字典树Trie 1 原理 2 Trie字符串统计 3 [LeetCode 208. 实现 Trie (前缀树)](https://leetcode-cn.com/problems/imp ...

  5. 数据结构(二)——Trie、并查集、堆

    前言 重学算法第5天,希望能坚持打卡不间断,从基础课开始直到学完提高课. 预计时长三个月内,明天再来!肝就完了 2月17日,day05 打卡 今日已学完y总的 算法基础课-2.3-第二章 数据结构(二 ...

  6. 总结二十二:如何在公司建立成功的技术文化(3)

    接上一篇:总结二十二:如何在公司建立成功的技术文化(2) 前言 不管你是继承一个积极的技术文化,还是自己创建,都要促进他发展并且保持他的积极性.这些都需要你不断做出准确的决策. 互相尊重 尊重是基础, ...

  7. 【Visual C++】游戏开发五十五 浅墨DirectX教程二十二 水乳交融的美学:alpha混合技术

    本系列文章由zhmxy555(毛星云)编写,转载请注明出处. 文章链接: http://blog.csdn.net/poem_qianmo/article/details/15026917 作者:毛星 ...

  8. 《道德经》「道生一,一生二,二生三,三生万物」

    中国是医药文化发祥最早的国家之一,从文明的曙光在天幕上耀映亚细亚大地之时,遍及神州大地的簇簇史前文化篝火,由点到面联接起来,形成燎原之势,逐渐的融化在文明时代的光华之中中医"是个专用名词,它 ...

  9. 2021年大数据Hadoop(二十二):MapReduce的自定义分组

    全网最详细的Hadoop文章系列,强烈建议收藏加关注! 后面更新文章都会列出历史文章目录,帮助大家回顾知识重点. 目录 本系列历史文章 前言 MapReduce的自定义分组 需求 分析 实现 第一步: ...

  10. 一位中科院自动化所博士毕业论文的致谢:二十二载风雨求学路,他把自己活成了光.........

    4月18日,中国科学院官方微博发布消息,披露了这篇论文为<人机交互式机器翻译方法研究与实现>,作者是2017年毕业于中国科学院大学的工学博士黄国平. 这篇论文中情感真挚的<致谢> ...

最新文章

  1. 简单实现ConfigurationManager.AppSettings[]效果存储系统变量
  2. 从windows server的文件服务到分布式文件服务(一)
  3. SpringBoot项目优化和Jvm调优(楼主亲测,真实有效)
  4. 原始样式增加标题_版式设计!10个技巧让你设计出好的标题
  5. Python语言规范
  6. linux 中断奶乱码,科学断奶经历:早中晚三次母乳,一个月内循序渐进自然断奶...
  7. 记一则js替换字符串的问题
  8. 【Java】基于栈的括号匹配问题
  9. MTK 驱动 (70)---MTK Projiectconfig.mk文件详细解释
  10. mysql之select+五种子句的理解
  11. 骑马与砍杀服务器修复,骑马与砍杀修复存档损坏的办法
  12. IOS --- OC与Swift混编(转)
  13. kubernetes如何进入指定的容器
  14. MotionEstimate运动估计综述
  15. 基本排序算法(冒泡,选择(希尔),插入,快速,归并,堆,二分查找)
  16. 5.1声道测试文件下载
  17. 腾达路由器设置成中继模式
  18. android 图标制作
  19. android常用字体代码,Android TextView设置字体风格多种组合
  20. 线程,Java8,10个lambda表达式

热门文章

  1. 三国志战略版:Daniel_兵无常势分析
  2. 资格考试_第三章_证券投资基金的类型
  3. html b5纸尺寸,A5纸的尺寸多大(各种标准纸张大小A1,A2,A3,A4纸的尺寸)
  4. 计算机软件是互联网行业吗,中国十大热门专业 互联网行业位居第一
  5. 【Http认证方式】——Basic认证
  6. OA实施周期:易用性才是关键因素
  7. function里面的两个参数是什么意思?
  8. 浙大计算机系课本,浙大计算机系毕业的一个理工男 找遍西湖边所有亭子写成了书...
  9. 法大大完成3.98亿元C轮融资,虎环球基金和腾讯联合领投...
  10. 教你使用Box2d制作用蜡笔手绘物体的效果(一)