POJ2375 暴力建图+tarjan缩点

魔方优化大师3.3.1.0单文件绿色版 最好用的系统优化软件,绿色、小巧,操作方便,常备在手,日用日新。 立即下载

POJ2375

题意:

给一个n*m,n,m<=500的格子滑雪场,每个格子有个海拔,可以上下左右滑,

海拔高的可以滑到海拔低的,海拔相同的可以互相滑

现在要建若干电梯(选两个格子使其可以互相到达,无海拔限制)

使得从任意一个点出发都可以经过整个滑雪场

问最少需要建多少个电梯

思路:

其实就是问最少加多少条边使得整个图变成强连通图

对于缩点后的DAG

入度为0 的点的数目 ,出度为0的点的数目之间的较大值就是答案了

(画几个图体会体会)

如果一开始已经是强连通就输出0

建图直接暴力!

坑点:

g++ re,c++wa,数组开800才过

282ms

#include<iostream>
#include<stdio.h>
#include<algorithm>
#include<string.h> 
using namespace std;
const int maxn=805;
const int maxe=640005;
int low[maxn*maxn];
int dfn[maxn*maxn];
bool ins[maxn*maxn];
int sk[maxn*maxn];
int poi=0,idx=0,cnt=0;
int num=0;
int head[maxn*maxn];
int to[maxe*2];
int nxt[maxe*2];

//bool vis[505][505];
int mp[605][605];
int dx[4]={-1,1,0,0};
int dy[4]={0,0,-1,1};
int n,m;
int in[maxn*maxn];//入度 
int ou[maxn*maxn];//出度 
int scc[maxn*maxn];
void add(int u,int v)
{
	cnt++;nxt[cnt]=head[u];
	head[u]=cnt; to[cnt]=v;
}
void dfs(int x,int y)
{
    // if(vis[x][y]==1)return ;
    // vis[x][y]=1;
     for(int i=0;i<=3;i++)
     {
         int tx=x+dx[i];
         int ty=y+dy[i];
         if(tx<1||tx>n||ty<1||ty>m)continue;
      //   printf("%d %d %d %d\n",x,y,tx,ty);
         if(mp[tx][ty]<=mp[x][y])
             add((x-1)*m+y,(tx-1)*m+ty);//printf("???");//m:lie
        // if(mp[tx][ty]==mp[x][y])
        //     add((x-1)*m+y,(tx-1)*m+ty),add((tx-1)*m+ty,(x-1)*m+y);                    
        //if(vis[tx][ty]==0&&mp[tx][ty]<=mp[x][y])
        //    dfs(tx,ty);
     }
}

void tarjan(int u)
{
	dfn[u]=low[u]=++idx;
	ins[u]=1;
	sk[poi++]=u;
	for(int i=head[u];i!=-1;i=nxt[i])
	{
		int v=to[i];
		if(!dfn[v])
		{
			tarjan(v);
			low[u]=min(low[u],low[v]);
		}
		else if(ins[v]) low[u]=min(low[u],dfn[v]);
	}
	if(low[u]==dfn[u])
	{
		num++;
		int t;
		do{
			t=sk[--poi];
			scc[t]=num;
			ins[t]=0;
		}
		while(t!=u);
	}
}

int main()
{
	scanf("%d %d",&m,&n);
	
		memset(ins,0,sizeof(ins));
		memset(dfn,0,sizeof(dfn));
		memset(low,0,sizeof(low));
		memset(head,-1,sizeof(head));
		memset(ou,0,sizeof(ou));
		memset(in,0,sizeof(in));
//        memset(vis,0,sizeof(vis));
		num=poi=cnt=idx=0;
	    for(int i=1;i<=n;i++)
            for(int j=1;j<=m;j++)
                scanf("%d",&mp[i][j]);
        for(int i=1;i<=n;i++)
            for(int j=1;j<=m;j++)
                dfs(i,j);
        /*
        for(int u=1;u<=n*m;u++)
        {
            printf("dian u:%d :",u);
            for(int i=head[u];i!=-1;i=nxt[i])
                printf(" %d",to[i]);
            puts("");
        }*/
        
		for(int i=1;i<=n*m;i++)
		{
			if(!dfn[i])
				tarjan(i);
		}
		int ans=0;
		for(int u=1;u<=n*m;u++)
		{
			for(int i=head[u];i!=-1;i=nxt[i])
			{
				int v=to[i];
				if(scc[u]!=scc[v])
				{
					ou[scc[u]]++;
					in[scc[v]]++;
				}
			}
		} 
	//	printf("num:%d\n",num);
		if(num==1)
		    printf("0\n");
        else
        {
      		int ans1=0;int ans2=0;
	    	for(int i=1;i<=num;i++)
	     	{
                        if(in[i]==0)ans1++;
		    	if(ou[i]==0)ans2++;
	      	}
	       	printf("%d\n",max(ans1,ans2));
        }


		
} 

MTK平台WiFi学习--Wi-Fi 连线/断线问题初步分析 摘要:本文详细介绍了MTK平台WiFi连接问题的日志分析方法。文章首先阐述了WiFi连接的标准流程,包括指令接收、BSSID选择、信道分配、认证关联、四次握手和DHCP获取等关键步骤。针对常见故障场景,如选网失败、信道申请失败、认证关联失败、四次握手失败等,提供了具体的日志分析方法和排查思路,包括识别关键日志、分析状态码、结合固件日志和抓包数据等。文章还特别强调了不同故障场景下需要收集的日志类型和分析要点,为WiFi连接问题的定位提供了一套系统化的解决方案。 阅读详情

相关推荐

手把手教你用STM32+LAN8720搭建以太网通信模块(含原理图)

本文详细介绍了如何使用STM32微控制器与LAN8720物理层芯片搭建以太网通信模块,涵盖硬件设计、软件配置及常见问题排查。重点讲解了LAN8720的低功耗设计、RMII接口简化布线等特性,以及STM32CubeMX配置和LwIP协议栈移植技巧,助力开发者快速实现稳定可靠的嵌入式网络通信。

CAT789的专栏 411

POJ 2375 Cow Ski Area(强连通)

POJ 2375 Cow Ski Area 题目链接 题意:给定一个滑雪场,每个点能向周围4个点高度小于等于这个点的点滑,现在要建电缆,使得任意两点都有路径互相可达,问最少需要几条电缆 思路:强连通缩点,每个点就是一个点,能走的建边,缩点后找入度出度为0的个数的最大值就是答案,注意一开始就强连通了答案应该是0 代码: #include #include #incl

Remilia's 1164

从零开始利用MATLAB进行FPGA设计(六)用ADC采集信号教程1

用AN9238采集信号的方法(1),包含PLL、FIFO、ILA的基础教程。

WZT725的博客 3094

POJ 2375 Cow Ski Area 强连通

Cow Ski Area Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 2153   Accepted: 614 Description Farmer John's cousin, Farmer Ron, who lives in the mountains of

Clearlemon 624

fdtd(时域有限差分)仿真

基础入门阶段采用 Step by step 的教学方式带着做具体的案例,在案例中学习 FDTD 应用的。的痛难点,将 FDTD 仿真引入实验当中,通过软件可视化处理有效直观的展示仿真的流程,与实验数。图像传感器,OLED 和液晶,表面计量,表面等离子体,石墨烯,太阳能电池,集成光子组件,超材。料,衍射光学和光子晶体。波,场极化,磁场,周期性结构,半球功率积分等设计解决方案,提供时域有限差分分析函数,时域。子光学传感器、热电子光探测器的光学特性研究、光学微腔宽带吸收器等多个方向的研究方法。

y2715163545的博客 5433

【深度学习-番外1】Win10系统搭建VSCode+Anaconda+Pytorch+CUDA深度学习环境和框架全过程

本文将介绍在Windows 10系统下搭建深度学习环境的完整过程,包括安装Anaconda、CUDA、NVIDIA显卡驱动以及Pytorch框架。后续本专栏的Python语言下的深度学习环境都以本篇搭建的为准。

fengzhuqiaoqiu的博客 3998

poj 2375

//2375 #include #include #include #include #include #define N 510 using namespace std; struct Node { int v,next; }e[N*N*4]; int head[N*N],e_num,num,od[N*N],id[N*N]; int map[N][N],temp_map[N][

cqwelly的专栏 622

BIOS硬件监控实战:如何手动读取IT8738芯片的温度与风扇数据(附代码)

本文深入探讨了如何绕过操作系统和HWMonitor等监控软件,直接通过寄存器级操作读取IT8738超级I/O芯片的硬件监控数据。文章提供了从动态定位EC空间、构建底层读写函数到解码传感器寄存器映射的完整实战指南,并附有C语言代码示例,帮助开发者理解BIOS硬件监控的底层原理,适用于定制硬件开发与故障诊断。

weixin_29192211的博客 109

POJ 2375 解题报告

这道题是先求强连通子图,然后压缩,选出度为0和入度为0的数目里面大的那个。思路是强连通子图内部的不用关心(已经两两互通了),强连通子图之间,在入度为0和出度为0的component之间连一条线(从出度为0到入度为0)。 类似的题我做过。也是USACO上的。但是。。。先是求neighbors的时候所有点共用一个(4元素的)数组,导致递归的时候覆盖了原来的邻居列表,导致错误。这个错误不是很容易发现。

thestoryofsnow的专栏 582

基于TL431与光耦的电压反馈环路优化设计实战

本文深入探讨了基于TL431与光耦的电压反馈环路优化设计实战。文章从理解这对“黄金搭档”的工作原理入手,详细拆解了电压采样电阻网络、偏置电路、光耦工作点设置以及动态补偿网络的设计心法与计算步骤。重点分享了如何通过RC补偿网络调试,确保环路在各种负载下稳定可靠,并提供了关键的实战避坑指南,帮助工程师解决电源设计中常见的振荡、噪声及可靠性问题。

nginx7reverse的博客 776

LPC2124定时器实现跑马灯

文章目录一、keil 4新建工程 一、keil 4新建工程 1、Create New Project,注意,最好添加进一个新建好的文件夹里,keil不会帮你新建。 2、添加设备类型:NXP目录下的LPC2124 3、选择启动文件Startu.s 4、new 一个file,保存命名为.c文件 5、添加进project里,右击,add 选中,添加 6、设置编译输出.hex文件 ...

qq_37937830的博客 5753

POJ -2375(强联通)

题目链接 Cow Ski Area 题意 好吧,还是看了各种翻译才看懂的。说的是一个人要自己建滑雪场 ,每个滑雪场都是一个一个方格,在输入中也就是一个数字(这个数字也就是这个滑雪场的高度),现在告诉你,每两个相邻的滑雪场可以直接从高的滑雪场通向低的滑雪场,低的不能通向高的滑雪场。除此之外没有别的通路。为了使得最后能从某任意一个滑雪场通向任意一个滑雪场,这个人会建一些路,这样才能使得低高度的滑雪场通...

“”云腾致雨“”的博客 249

flowable工作流看这一篇就够了(基础篇)

接下来我们构建一个非常简单的请假流程,Flowable引擎需要流程定义为BPMN 2.0格式,这是一个业界广泛接受的XML标准。在Flowable术语中,我们将其称为一个流程定义(process definition)。一个流程定义可以启动多个流程实例(process instance)。流程定义可以看做是重复执行流程的蓝图。在这个例子中,流程定义定义了请假的各个步骤,而一个流程实例对应某个雇员提出的一个请假申请。

qq_38196449的博客 2万+

POJ2375 Cow Ski Area (添最少边构造强连通分量的某个与入度出度相关的结论)

题意:本题描述了一片滑雪场,并且规定奶牛从一个点只能向它相邻的并且高度不大于它的点运动,现在想要在某些点对之间加上缆车使得奶牛也可以从较低点到达较高点,问最少需要多少辆这样的缆车就可以使得奶牛可以从任意一个点运动到滑雪场的每个角落。 思路:即问至少加多少条边使图变成强联通图,先缩点成DAG。 不难知道强连通分量的所有节点的入度和出度均不为0,可以统计DAG上的入度和出度为0的个数分别是a,b。

kalilili的专栏 1526

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

Poj 2375 Cow Ski Area【建图+强连通Kosaraju+缩点染色】

Cow Ski Area Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 3137   Accepted: 872 Description Farmer John's cousin, Farmer Ron, who lives i

mengxiang000000 919

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

POJ 2375 Cow Ski Area 强连通图最少添边数

题目来源:POJ 2375 Cow Ski Area 题意:n*m的一个矩阵 如果在一个点上 可以往上下左右4个点 并且必须大于等于要去的点 可以安装一个任意门 每个任意门可以连接容易2个点 求最少安装多少个任意门 可以是全通连通 思路:强连通分量缩点 求出度为0和入读为0的连通分量2者的最大值 特判全图强连通的情况 #include #include #include #inc

嗯。 1357

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

POJ2375 Cow Ski Area 强连通分量

题意:给定一个n*m矩阵,每一个点都有一个高度,规定只能由高处向低处走,现在某些地方加电梯,使得低处能向高处走,问最少加几个电梯,使得任意两个点之间可以相互到达。即整个图是强连通的。 用g++交题re,c++交能过 #include #include using namespace std; const int maxn = 520; int scc[maxn][maxn],map[maxn]

chen_minghui的博客 330

POJ2375 Cow Ski Area——求强连通分量

这道题,乍一看,大家会想到那个记忆化搜索的“滑雪”,但是,这两道题是完全不同的。这题题意有些难以理解:给出一块滑雪场的地形图,只能由一个点向相邻的点去滑,而且低处不能滑向高处。缆车是可以安装在任意两点间的,每个点也可以安装多部缆车,缆车可以使连接的两个相通。求最少的缆车数目使得所

这个诗人不懂浪漫 1438

POJ 2375 强联通缩点+判断

题意:给你一个矩阵,让你加

【洛风城】 592

poj 2375 Cow Ski Area bfs

这个题目用tarjan找联通块,缩点,然后统计出入度为0的点理论上是可行的,但问题是会暴栈。考虑到这个题目的特殊性,可以直接用一次bfs找到数字相同且联通的块,这就是一个联通块,然后缩点,统计出入度即可。 #include #include #include #include using namespace std; const int maxn=1e3+9; int a[maxn][m

yrleep的专栏 1142

poj2375 强联通分量

用bfs将连着的相同高度的山坡缩为1个点,再

WJSZMRX 621

POJ 2375 Cow Ski Area

大意:描述了一片滑雪场,并且规定奶牛从一个点只能向它相邻的并且高度不大于它的点运动,现在想要某些点对之间加上缆车使得奶牛业可以从较低点向较高点运动,问最少需要多少辆这样的缆车就可以使得奶牛可以从一个点到滑雪场的每一个角落。 思路:对于奶牛的运动,我们分两种情况进行考虑。 1、向高度相同运动:应为相互可达,那么只要到达其中一个的话,则整个高度相同的都可以到达,这与强连通分量很相似,所以我们可以把

Wall_F的专栏 1385

POJ 2375 Cow Ski Area 雪场缆车(强连通分量)

【问题描述】   约翰的表哥罗恩生活在科罗拉多州。他进来打算教他的奶牛们滑雪,但是奶牛们非常害羞,不敢在游人如织的度假胜地滑雪。没办法,他只好自己建滑雪场了。  罗恩的雪场可以划分为W列L行,每个方格都有一个特定的高度H。奶牛可以在相邻邻方格间滑雪,而且不能由低到高滑。   为了保证任意方格可以互通,罗恩打算造一些直达缆车。缆车很强大,可以连接任意两个方格,而且是双向的。而且同一个方格可以造多台缆

wx_t91的博客 829

POJ2375 Cow Ski Area【Tarjan】【强连通分量】

题目大意: 有一片供奶牛滑雪的滑雪场,可供滑雪的区域是W(宽)*L(长)的矩阵。上边有W*L个点。规定 奶牛从一个点只能向它上、下、左、右相邻的并且高度不大于它的点运动。现在想要在某些 点对之间架设缆车,使得奶牛可以从较低的地方想较高的地方运动,那么问题来了:最少需 要多少辆这样的缆车就可以使奶牛从每个点运动到可供滑雪区域的每个角落。 思路: 把奶牛符合从点u移动到点v的条件当做一条单向边。那么所有点和边就可以构成有向图。根 据奶牛可以从点u移动到邻近并且高度不大于它的点v,可以分为两种情况:(1)点v比

程序员充电站(itcharge) 1168

poj2375强连通图最少添加边数

Farmer John's cousin, Farmer Ron, who lives in the mountains of Colorado, has recently taught his cows to ski. Unfortunately, his cows are somewhat timid and are afraid to ski among crowds of people a...

qq_40859951的博客 455

Tarjan算法缩点

在DFS的过程中,当一个节点的所有邻接节点都被访问完毕后,该节点才会被标记为一个强联通分量的结束点。这是因为Tarjan算法在DFS遍历过程中,最后一个被标记的强联通分量在缩点图中没有入边,从而在拓扑排序中应该是第一个节点。由于Tarjan算法是深度优先的,最后一个被标记的强联通分量在缩点图中没有入边,这意味着它在拓扑排序中应该是第一个节点。在有向无环图中,由于没有环的存在,我们可以利用拓扑排序来确定节点的处理顺序,然后使用动态规划来计算最短路径。你只需要求出这个权值和。共一行,最大的点权之和。

qq_73702550的博客 2244
上一篇: 强连通刷起来
下一篇: POJ2762 tarjan缩点+拓扑排序
animalcoder
博客等级 码龄9年 43粉丝 150原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值