BFS+强连通。输出max(缩点后出度为0的点数,缩点后入度为0的点数)。

 #include <cstdio>
#include <iostream>
#include <cstring>
#include <cctype>
#include <algorithm>
#define LL unsigned __int64
using namespace std; const int N= ; struct Edge{
int u,v;
int next;
}edge[N*];
int tot,index;
int head[N],dfn[N],low[N],stack[N],st;
int outdegree[N],indegree[N];
int belong[N],beg;
bool instack[N];
int map[][]; int dir[][]={
{,},
{,-},
{,},
{-,}
}; void addedge(int u,int v){
edge[tot].u=u;
edge[tot].v=v;
edge[tot].next=head[u];
head[u]=tot++;
} void Tarjan(int u) {
dfn[u]=low[u]=++index;
stack[st++]=u;
instack[u]=true;
for(int e=head[u];e!=-;e=edge[e].next){
int v=edge[e].v;
if (dfn[v]==-) {
Tarjan(v) ;
low[u] = min(low[u], low[v]) ;
}
else if (instack[v]) {
low[u] = min(low[u], dfn[v]) ;
}
}
int v;
if (dfn[u] == low[u]) {
beg++;
outdegree[beg]=indegree[beg]=;
do{
v=stack[--st];
belong[v]=beg;
instack[v]=false;
}while(u!= v);
}
} bool ok(int i,int j,int x,int y){
if(i>=&&i<x&&j>=&&j<y) return true;
return false;
} int main(){
int x,y;
while(scanf("%d%d",&y,&x)!=EOF){
for(int i=;i<x;i++){
for(int j=;j<y;j++)
scanf("%d",&map[i][j]);
} tot=index=st=beg=;
int u,v,tx,ty;
int spoint=x*y;
for(int i=;i<=spoint;i++){
head[i]=dfn[i]=low[i]=belong[i]=-;
instack[i]=false;
} for(int i=;i<x;i++){
for(int j=;j<y;j++){
u=i*y+j;
for(int k=;k<;k++){
tx=i+dir[k][];
ty=j+dir[k][];
if(ok(tx,ty,x,y)){
if(map[tx][ty]<=map[i][j]){
v=tx*y+ty;
addedge(u,v);
}
}
}
}
} for(int i=;i<spoint;i++){
if(dfn[i]==-){
Tarjan(i);
}
} for(int i=;i<spoint;i++){
u=i;
for(int e=head[u];e!=-;e=edge[e].next){
v=edge[e].v;
if(belong[u]!=belong[v]){
outdegree[belong[u]]++;
indegree[belong[v]]++;
}
}
} int ou=,in=;
if(beg==){
puts("");
continue;
}
for(int i=;i<=beg;i++){
if(outdegree[i]==){
ou++;
}
if(indegree[i]==)
in++;
} printf("%d\n",max(ou,in));
}
return ;
}

POJ 2375的更多相关文章

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

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

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

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

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

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

  4. POJ 2375 Cow Ski Area

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

  5. poj 2375 Cow Ski Area bfs

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

  6. POJ 2375 Cow Ski Area【tarjan】

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

  7. Book---强连通分量

    这几天一直在做强连通,现在总结一小下 1.定义 在一个有向图中,如果任意的两个点都是相互可达的,就说这个图是强连通的,有向图的极大强连通子图,称为强连通分量 2.求法 学的是白书上的tarjan算法 ...

  8. 【转载】图论 500题——主要为hdu/poj/zoj

    转自——http://blog.csdn.net/qwe20060514/article/details/8112550 =============================以下是最小生成树+并 ...

  9. POJ 3278:The merchant(LCA&DP)

    The merchant Time Limit: 3000MS   Memory Limit: 65536K Total Submissions: 6864   Accepted: 2375 Desc ...

随机推荐

  1. 【POJ 2230】 Watchcow

    [题目链接] http://poj.org/problem?id=2230 [算法] 欧拉回路 [代码] #include <algorithm> #include <bitset& ...

  2. 洛谷P2593 [ ZJOI 2006 ] 超级麻将 —— DP

    题目:https://www.luogu.org/problemnew/show/P2593 DP的话,考虑到当前这一位只跟前两位有关,所以记录一下这3位的状态就行: 于是一开始记录的第 i 位,i- ...

  3. 5-7 第五天 微信 JS-SDK-简介

    微信的SDK显然呢并不是在这个公众号里面直接使用的,而是在网页里面使用的.什么样的网页呢?就是微信内置的浏览器.你从朋友圈.从好友消息.从群消息,确定是从公众号的回复里面打开一个链接. 便会启动一个浏 ...

  4. Mock实现模拟python的对象

    Mock库的应用 Mock在Python3.3之前是第三方库,需要安装 pip install Mock :导入 import mock Mock在Python3.3之后是Python标准库,导入方式 ...

  5. python 11:range(起始索引,终止索引,步数)(默认情况下步数为1,生成从起始索引,每次增加(终止索引-起始索引)/步数,到终止索引前的数字串)

    squares = [] for value in range(1,11): #第三参数默认为1,生成从1开始,每次增加1步数,到11前的10为止的数字串 square = value ** 2 sq ...

  6. python 字符编码的两种方式写法:# coding=utf-8和# -*- coding:utf-8 -*-

    python运行文件是总会出现乱码问题,为了解决这个问题,在文件开头加上: # coding=utf-8 或者 # -*- coding:utf-8  -*- # coding=<encodin ...

  7. 数据库操作通用函数,增强可重复利用性能C#,asp.net.sql2005

    using System;using System.Data;using System.Data.SqlClient; namespace com.hua..li{ /// <summary&g ...

  8. PHP序列化 反序列化

    序列化是将变量转换为可保存或传输的字符串的过程:反序列化就是在适当的时候把这个字符串再转化成原来的变量使用.这两个过程结合起来,可以轻松地存储和传输数据,使程序更具维护性. 1. serialize和 ...

  9. MVVM实现ViewModel获取View输入验证状态

    由于Binding只把Convert成功的值送往Source,当目标中的值Convert失败时Source的值依然是旧值,所以ViewModel必须获取View的输入验证状态,以下是本人的实现. 当“ ...

  10. 前端编码规范(2)HTML 规范

    文档类型 推荐使用 HTML5 的文档类型申明: <!DOCTYPE html> (建议使用 text/html 格式的 HTML.避免使用 XHTML.XHTML 以及它的属性,比如 a ...