题目大意:一个W*L的山,每个山有个高度,当且仅当一个山不比它相邻(有公共边的格子)的山矮时能够滑过去,现在可以装化学电梯来无视山的高度滑雪,问最少装多少电梯使得任意两点都可到达

思路:最后一句话已经把强连通模型裸裸地说出来了 那问题变成了一个图最小加几条边变成强连通图的经典问题,比较一下出度为0和入度为0的点的个数的大小即可,还有个特例只有一个SCC的情况

#include<cstdio>

#include<string.h>

#include<iostream>

#include<algorithm>

#define maxn 6000900

using namespace std;

const int dx[10]={0,0,0,1,-1};

const int dy[10]={0,1,-1,0,0};

int map[509][509];

int head[maxn],next[maxn],point[maxn],now,col,tim;

int dfn[maxn],low[maxn],stack[maxn],top,belong[maxn];

int in[maxn],out[maxn];

bool instack[maxn];

void add(int x,int y)

{

next[++now]=head[x];

head[x]=now;

point[now]=y;

}

void tarjan(int k)

{

dfn[k]=low[k]=++tim;

stack[++top]=k;

instack[k]=1;

for(int i=head[k];i;i=next[i])

{

int u=point[i];

if(dfn[u]==0)

{

tarjan(u);

low[k]=min(low[k],low[u]);

}

else if(instack[u])

{

low[k]=min(low[k],low[u]);

}

}

if(dfn[k]==low[k])

{

int u;

++col;

do

{

u=stack[top--];

belong[u]=col;

instack[u]=0;

}while(u!=k);

}

}

int main()

{

int n,m;

scanf("%d%d",&n,&m);

memset(map,-1,sizeof(map));

for(int i=1;i<=m;i++)

{

for(int j=1;j<=n;j++)

{

scanf("%d",&map[i][j]);

}

}

for(int i=1;i<=m;i++)

{

for(int j=1;j<=n;j++)

{

for(int k=1;k<=4;k++)

{

int x=i+dx[k],y=j+dy[k];

if(map[x][y]!=-1 && map[i][j]>=map[x][y])

{

int xx=(i-1)*n+j,yy=(x-1)*n+y;

add(xx,yy);

}

}

}

}

for(int i=1;i<=m*n;i++)

if(dfn[i]==0)tarjan(i);

if(col==1)

{

printf("0\n");

return 0;

}

for(int i=1;i<=m*n;i++)

{

for(int j=head[i];j;j=next[j])

{

int u=point[j];

if(belong[i]!=belong[u])

{

out[belong[i]]++;

in[belong[u]]++;

}

}

}

int zero1=0,zero2=0;

for(int i=1;i<=col;i++)

{

if(in[i]==0)zero1++;

if(out[i]==0)zero2++;

}

printf("%d\n",max(zero1,zero2));

return 0;

}

POJ 2375 Cow Ski Area【tarjan】的更多相关文章

  1. POJ 2375 Cow Ski Area(强连通)

    POJ 2375 Cow Ski Area id=2375" target="_blank" style="">题目链接 题意:给定一个滑雪场, ...

  2. POJ 2375 Cow Ski Area

    Cow Ski Area Time Limit: 1000ms Memory Limit: 65536KB This problem will be judged on PKU. Original I ...

  3. POJ 2375 Cow Ski Area (强连通分量)

    题目地址:POJ 2375 对每一个点向与之相邻并h小于该点的点加有向边. 然后强连通缩点.问题就转化成了最少加几条边使得图为强连通图,取入度为0和出度为0的点数的较大者就可以.注意,当强连通分量仅仅 ...

  4. POJ 2375 Cow Ski Area[连通分量]

    题目链接:http://poj.org/problem?id=2375题目大意:一片滑雪场,奶牛只能向相邻的并且不高于他当前高度的地方走.想加上缆车是的奶牛能从低的地方走向高的地方,求最少加的缆车数, ...

  5. poj 2375 Cow Ski Area bfs

    这个题目用tarjan找联通块,缩点,然后统计出入度为0的点理论上是可行的,但问题是会暴栈.考虑到这个题目的特殊性,可以直接用一次bfs找到数字相同且联通的块,这就是一个联通块,然后缩点,统计出入度即 ...

  6. poj 1236 Network of Schools 【Tarjan】

    题目链接:http://poj.org/problem?id=1236 题意: 本题为有向图. 需解决两个问题: 1 须要给多少个点,才干传遍全部点. 2 加多少条边,使得整个图变得强连通. 使用Ta ...

  7. POJ 3660 Cow Contest. (传递闭包)【Floyd】

    <题目链接> 题目大意: 有n头牛, 给你m对关系(a, b)表示牛a能打败牛b, 求在给出的这些关系下, 能确定多少牛的排名. 解题分析: 首先,做这道题要明确,什么叫确定牛的排名.假设 ...

  8. POJ2375 Cow Ski Area (强连通)(缩点)

                                        Cow Ski Area Time Limit: 1000MS   Memory Limit: 65536K Total Sub ...

  9. D - Cow Ski Area

    Description Farmer John's cousin, Farmer Ron, who lives in the mountains of Colorado, has recently t ...

随机推荐

  1. (转 )Unity对Lua的编辑器拓展

    转 http://blog.csdn.net/ZhangDi2017/article/details/61203505 当前版本的Unity(截至Unity5.5.x)中TextAsset类不支持后缀 ...

  2. 外文翻译 《How we decide》多巴胺的预言 第三节

    这是第二章的最后一节. 书的导言 本章第一节 本章第二节 本节阅读感言:自我批评是自我提升的妙方. 多巴胺是我们感情的源泉.多巴胺相关的神经系统在不断的记录着我们主观意识没有注意到的一个个模式,将它们 ...

  3. 04.Java多线程并发库API使用3

    1.java5的Semaphere同步工具 Semaphore可以维护当前访问自身的线程个数,并提供了同步机制.使用Semaphore可以控制同时访问资源的线程个数,例如,实现一个文件允许的并发访问数 ...

  4. 序列化shelve模块

    1.shelve对pickle进行封装,所以shelve也只能在python里使用. shelve可以进行多次dump而且顺序不会乱. import shelve f = shelve.open('s ...

  5. codevs 3070 寻找somebody4(水题日常)

     时间限制: 1 s  空间限制: 32000 KB  题目等级 : 黄金 Gold   题目描述 Description 有一天.....sb不见了,有个人要去找他..他发现sb在一个杨辉三角里.. ...

  6. 再遇BGP

    第一次遇到BGP,是在大学的课堂上,现在再次看到它,有种深深的无奈,我只记得它的名字,忘记了它的样子. 那么什么是BGP呢? 翻译过来就是边界网关协议,一个用来网络数据进行选路的路由协议,使用TCP协 ...

  7. springmvc+maven搭建web项目之二 通过另一种方式配置spring

    1.创建maven web项目 2. 配置pom.xml <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:x ...

  8. Two-Phase Commit (2PC)

    两阶段提交模式像极了比赛发令:“预备,开始!”

  9. CocosCreator工程内的命名

    命名结构总体的命名结构遵循以下格式 前缀-内容-尾缀 - 前缀:用来定义node的属性- 内容:node的名字- 尾缀:序列或状态1231. 前缀说明:在开始的时候定义/声明这个节点的属性前缀可以是一 ...

  10. 1、C编程预备计算机知识

    一.数据类型 基本数据类型 1.整数 整形 -- int -- 4 短整型 -- short int -- 2 长整型 -- long int --8 2.浮点数(实数) 单精度浮点数 -- floa ...