【NOIP 模拟题】刺杀大使(二分答案+并查集)

原创 2016年08月28日 16:59:22

                                                        

                                           

                                                         


【题解】【二分答案】

【看到最大值最小,那必然二分答案啊,考试时不知脑子干什么去了。。。】

【先找出整个矩阵中的最大值,作为二分的右边界,然后,二分答案,把符合条件的相邻的格用并查集并到一个集合中,当用小于等于当前值的格可以把1和n*m联通时,当前值合法】

#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
int n,m,a[1010][1010],ans,maxn;
int f[1000010];
int  find(int x)
{
	if(f[x]==x) return f[x];
	f[x]=find(f[x]);
	return f[x];
 } 
inline void link(int x,int y)
{
	int f1=find(x),f2=find(y);
	f[f1]=f2;
}
inline bool check(int t)
{
	for(int i=1;i<=n*m;++i) f[i]=i;
	for(int i=1;i<=n;++i)
	 for(int j=1;j<=m;++j)
	  if(a[i][j]<=t)
	   {
	   	int now=(i-1)*m+j;
	   	if(i+1<=n&&a[i+1][j]<=t) link(now,i*m+j);
	   	if(j+1<=m&&a[i][j+1]<=t) link(now,now+1);
	   }
	if(find(1)==find(n*m)) return 1;
	return 0;
}
inline void qsort(int l,int r)
{
	int mid;
	while(l<=r)
	 {
	 	mid=(l+r)>>1;
	 	if(check(mid)) r=mid-1,ans=mid;
	 	 else l=mid+1;
	 }
}
int main()
{
	freopen("murder.in","r",stdin);
	freopen("murder.out","w",stdout);
	int i,j;
	scanf("%d%d",&n,&m);
	for(i=1;i<=n;++i) 
	 for(j=1;j<=m;++j)
	   scanf("%d",&a[i][j]),maxn=max(a[i][j],maxn);
	qsort(0,maxn);
	printf("%d\n",ans);
	return 0;
 } 


版权声明:本文为博主原创文章,转载请注明出处:http://blog.csdn.net/reverie_mjp

相关文章推荐

NOIP模拟题 2016.11.18 [数论] [计数] [并查集]

第一题:信(believe.cpp/c/pas) 背景描述: 一切死亡都有冗长的回声 —— 《一切》北岛 给定一个N个元素的序列A, 定义Bi = (Ai and A1) + (Ai and...

NOIP模拟题 by天津南开中学 莫凡[tarjan][树剖][并查集]

考试总结: 解题报告: 一. 图的连通性: 题意:给定一图,动态删边,动态求是否连通,且查询中输入的变量需xor当前边数才为最终输入数据; 分析:只删边则可以逆向建边用并查集查询是否连通,并...

NOIP模拟题 2016.10.31 [DP] [搜索] [并查集]

**NOIP模拟赛 【题目** 【问题描述】 Mushroom手中有n个数排成一排,现在Mushroom想取一个连续的子序列,使得这个子序列满足:最多只改变一个数,使得这个连续的子序列是严格上升...

NOIP模拟题[递推][并查集][DP]

不能换考试策略。 数组大的那一维定义在前面可以减小常数(我用的时候有4倍)。T1: 题意: 求一个数列在可以修改一个数的情况下最长连续上升子序列。 分析: 用第二维标记一下改没改过,乱搞一下...

NOIP模拟题 2016.11.9 [动态规划] [数论] [二分答案] [启发式合并] [线段树] [树链剖分]

子序列 描述 给定3 个字符串,求它们的最长公共子序列。 输入 第一行一个整数n,表示三个字符串的长度 接下来三行,每行是一个长度为n 只包含小写字母的字符串。 输出 输出最长公共子序列...

NOIP模拟题 2016.10.5 [Trie] [数学] [二分答案] [杂题] [复杂状态DP]

T1: 题意:求序列中两两取& | ^的最大值。。这道题相当于三道题。。XOR就是Trie树上贪心即可,注意一开始不可以加入0这个串,并且插入a[1]后从i=2开始匹配。 另外,匹配的时候两种写法...

【模拟题】【集训系列1】【dp】【并查集】一套神奇的题

T1: Mushroom的序列 【问题描述】 Mushroom手中有n个数排成一排,现在Mushroom想取一个连续的子序列,使得这个子序列满足:最多只改变一个数,使得这个连续的子序列...

蓝桥杯2017官方模拟题 风险度量(并查集,暴力)

题目: X星系的的防卫体系包含 n 个空间站。这 n 个空间站间有 m 条通信链路,构成通信网。 两个空间站间可能直接通信,也可能通过其它空间站中转。 对于两个站点x和y (x !...

NOIP模拟题 2016.11.8 [数学归纳法] [贪心] [二分答案] [Bash模拟]

T1: 题意:有n个字符串,每个字符串可以通过无限次翻转区间[1,m]中的字符,但是要保证m为偶数。通过简单的变换可以把整个字符串左移2位,那么由数学归纳法可以得到左移K位都是可以做到的,只要保证K...

JZOJ 3428 【NOIP2013模拟】刺杀大使

原题Description伊朗伊斯兰革命卫队(某恐怖组织)正在策划一起刺杀行动,他们的目标是沙特驻美大使朱拜尔。他们来到了沙特驻美使馆,准备完成此次刺杀,要进入使馆首先必须通过使馆前的防御迷阵。迷阵一...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)