3388: [Usaco2004 Dec]Cow Ski Area雪场缆车

Time Limit: 1 Sec  Memory Limit: 128 MB
Submit: 108  Solved: 47
[Submit][Status][Discuss]

Description

    约翰的表哥罗恩生活在科罗拉多州.他近来打算教他的奶牛们滑雪,但是奶牛们非常害羞,
不敢在游人如织的度假胜地滑雪.没办法,他只好自己建滑雪场了.罗恩的雪场可以划分为W列L行(1≤W≤500;1≤L≤500),每个方格有一个特定的高度H(O≤日≤9999).奶牛可以在相临方格间滑雪,而且不能由低到高滑.    为了保证任意方格可以互通,罗恩打算造一些直达缆车.缆车很强大,可以连接任意两个方格,而且是双向的.而且同一个方格也可以造多台缆车.但是缆车的建造费用贵得吓人,所以他希望造尽量少的缆车.那最少需要造多少台呢?

Input

  第1行:W,L.
  接下来输入宽W高L的矩阵地图.

Output

    最小的缆车数.

Sample Input

9 3
1 1 1 2 2 2 1 1 1
1 2 1 2 3 2 1 2 1
1 1 1 2 2 2 1 1 1

Sample Output

3

如过相邻的两个格子x和y满足a[x]>=a[y],那么x到y连一条有向边

之后强连通分量缩点,答案就是max(入度为0的点的个数,出度为0的点的个数)

注意特判答案为0的情况!

#include<stdio.h>
#include<vector>
#include<stack>
#include<algorithm>
using namespace std;
vector<int> G[250005], G2[250005];
stack<int> st;
int num, t, time[250005], in[250005], out[250005], vis[250005], low[250005], scc[250005], a[505][505], dir[4][2] = {1,0,0,1,-1,0,0,-1};
void Trajan(int x)
{int i, temp;st.push(x);vis[x] = 1;low[x] = time[x] = ++t;for(i=0;i<G[x].size();i++){temp = G[x][i];if(vis[temp]==0){Trajan(temp);low[x] = min(low[x], low[temp]);}else if(scc[temp]==0)low[x] = min(low[x], time[temp]);}if(low[x]==time[x]){num++;while(st.empty()==0){temp = st.top();st.pop();scc[temp] = num;if(temp==x)break;}}
}
int main(void)
{int n, m, i, j, k, x, y, temp;scanf("%d%d", &m, &n);for(i=1;i<=n;i++){for(j=1;j<=m;j++)scanf("%d", &a[i][j]);}for(i=1;i<=n;i++){for(j=1;j<=m;j++){for(k=0;k<=3;k++){x = i+dir[k][0];y = j+dir[k][1];if(x>=1 && x<=n && y>=1 && y<=m && a[x][y]<=a[i][j])G[(i-1)*m+j].push_back((x-1)*m+y);}}}for(i=1;i<=n*m;i++){if(vis[i]==0)Trajan(i);}for(i=1;i<=n*m;i++){for(j=0;j<G[i].size();j++){temp = G[i][j];if(scc[i]!=scc[temp])G2[scc[i]].push_back(scc[temp]);}}if(num==1)printf("0\n");else{for(i=1;i<=num;i++){out[i] = G2[i].size();for(j=0;j<G2[i].size();j++)in[G2[i][j]]++;}x = y = 0;for(i=1;i<=num;i++){if(out[i]==0)x++;if(in[i]==0)y++;}printf("%d\n", max(x, y));}return 0;
}
/*
3 3
1 1 1
1 2 1
1 1 1
*/

bzoj 3388: [Usaco2004 Dec]Cow Ski Area雪场缆车(Tarjan)相关推荐

  1. poj 2376 bzoj 3389: [Usaco2004 Dec]Cleaning Shifts安排值班(贪心)

    3389: [Usaco2004 Dec]Cleaning Shifts安排值班 Time Limit: 1 Sec  Memory Limit: 128 MB Submit: 462  Solved ...

  2. bzoj 3391: [Usaco2004 Dec]Tree Cutting网络破坏

    3391: [Usaco2004 Dec]Tree Cutting网络破坏 Time Limit: 1 Sec  Memory Limit: 128 MB Submit: 296  Solved: 2 ...

  3. bzoj 1648: [Usaco2006 Dec]Cow Picnic 奶牛野餐(暴力DFS)

    1648: [Usaco2006 Dec]Cow Picnic 奶牛野餐 Time Limit: 5 Sec  Memory Limit: 64 MB Submit: 774  Solved: 480 ...

  4. BZOJ 3391: [Usaco2004 Dec]Tree Cutting网络破坏(搜索)

    这道直接遍历一遍求出每个点的子节点数目就行了= = CODE: #include<cstdio> #include<iostream> #include<algorith ...

  5. BZOJ 3390: [Usaco2004 Dec]Bad Cowtractors牛的报复(最大生成树)

    这很明显就是最大生成树= = CODE: #include<cstdio> #include<iostream> #include<algorithm> #incl ...

  6. POJ 2375 Cow Ski Area 增加最小边使图强连通

    题意:一个矩阵图,每一个格子有一个权值,相邻格子之间可以通,条件是一个格子可以走到相邻格子的条件是相邻格子的全是不大于当前格子,问增加多少条边使得每一个格子都可以到达任意格子 想法:tarjan缩点, ...

  7. 【BZOJ3387】[Usaco2004 Dec]Fence Obstacle Course栅栏行动 线段树

    [BZOJ3387][Usaco2004 Dec]Fence Obstacle Course栅栏行动 Description 约翰建造了N(1≤N≤50000)个栅栏来与牛同乐.第i个栅栏的z坐标为[ ...

  8. bzoj3390[Usaco2004 Dec]Bad Cowtractors牛的报复*

    bzoj3390[Usaco2004 Dec]Bad Cowtractors牛的报复 题意: 最大生成树. 题解: 最大生成树. 代码: 1 #include <cstdio> 2 #in ...

  9. bzoj3391[Usaco2004 Dec]Tree Cutting网络破坏*

    bzoj3391[Usaco2004 Dec]Tree Cutting网络破坏 题意: 给一棵树,问去掉哪个点后可以使剩下的每个子树大小都小于等于节点总数的一半.n≤10000. 题解: dfs的时候 ...

最新文章

  1. GitHub 高速上手 ---- 创建密钥,连接
  2. ios 如何对UITableView中的内容进行排序
  3. OllyDbg 使用笔记 (二)
  4. JBookManager v1.00.2008314 (编辑管理您的Jar电子书)
  5. Alexnet论文解读及代码实现
  6. region实现大纲效果
  7. 解决overlay2存储驱动的磁盘配额问题
  8. ATL 工程下添加右击菜单
  9. 图像分辨率测试ISO12233 - 2017中文翻译
  10. 10本Java网站开发必看书籍
  11. 眨眼视频制作与生成活体视频生成
  12. 面向对象六大原则——依赖倒置原则
  13. c语言中floor有什么作用,floor函数?floor函数的使用方法?ceil函数?C语言 floor 函数...
  14. 东北大学计算机BAT,基于BAT-OOPN方法的污染物排放量化模型研究
  15. 区块链具有的8种特性
  16. Spring Data JPA 原理与实战第二天 掌握Repoitory和DQM
  17. e.g., malformed request syntax, invalid request message framing, or deceptive request routing)
  18. pyecharts绘制日历图、漏斗图、仪表盘、水滴图
  19. codeforce 427 C. Checkposts(tarjan 强连通分量)
  20. 飞腾S2500平台PCIe SWITCH下热插拔验证

热门文章

  1. python和java学哪个好-Python和Java学哪个好?大家是怎么选的
  2. 55岁自学python编程-热门专业三年一换?奥鹏教育解析编程还能火多久
  3. python能做什么项目-python能做什么项目
  4. 学python需要什么基础-学习python需要什么基础
  5. php和python-现在自学php和python那个合适?
  6. 专科python应届生工资多少-应届生自学Python两个月,为什么找不到工作?
  7. 语音自动识别文字软件
  8. 谷歌智能助理能同时听懂两种语言 超过同类产品
  9. React-组件生命周期
  10. 内置对象 API Math对象、Data对象、Array对象、String对象