bzoj 3388: [Usaco2004 Dec]Cow Ski Area雪场缆车(Tarjan)
3388: [Usaco2004 Dec]Cow Ski Area雪场缆车
Time Limit: 1 Sec Memory Limit: 128 MB
Submit: 108 Solved: 47
[Submit][Status][Discuss]
Description
Input
Output
Sample Input
Sample Output
如过相邻的两个格子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)相关推荐
- poj 2376 bzoj 3389: [Usaco2004 Dec]Cleaning Shifts安排值班(贪心)
3389: [Usaco2004 Dec]Cleaning Shifts安排值班 Time Limit: 1 Sec Memory Limit: 128 MB Submit: 462 Solved ...
- bzoj 3391: [Usaco2004 Dec]Tree Cutting网络破坏
3391: [Usaco2004 Dec]Tree Cutting网络破坏 Time Limit: 1 Sec Memory Limit: 128 MB Submit: 296 Solved: 2 ...
- bzoj 1648: [Usaco2006 Dec]Cow Picnic 奶牛野餐(暴力DFS)
1648: [Usaco2006 Dec]Cow Picnic 奶牛野餐 Time Limit: 5 Sec Memory Limit: 64 MB Submit: 774 Solved: 480 ...
- BZOJ 3391: [Usaco2004 Dec]Tree Cutting网络破坏(搜索)
这道直接遍历一遍求出每个点的子节点数目就行了= = CODE: #include<cstdio> #include<iostream> #include<algorith ...
- BZOJ 3390: [Usaco2004 Dec]Bad Cowtractors牛的报复(最大生成树)
这很明显就是最大生成树= = CODE: #include<cstdio> #include<iostream> #include<algorithm> #incl ...
- POJ 2375 Cow Ski Area 增加最小边使图强连通
题意:一个矩阵图,每一个格子有一个权值,相邻格子之间可以通,条件是一个格子可以走到相邻格子的条件是相邻格子的全是不大于当前格子,问增加多少条边使得每一个格子都可以到达任意格子 想法:tarjan缩点, ...
- 【BZOJ3387】[Usaco2004 Dec]Fence Obstacle Course栅栏行动 线段树
[BZOJ3387][Usaco2004 Dec]Fence Obstacle Course栅栏行动 Description 约翰建造了N(1≤N≤50000)个栅栏来与牛同乐.第i个栅栏的z坐标为[ ...
- bzoj3390[Usaco2004 Dec]Bad Cowtractors牛的报复*
bzoj3390[Usaco2004 Dec]Bad Cowtractors牛的报复 题意: 最大生成树. 题解: 最大生成树. 代码: 1 #include <cstdio> 2 #in ...
- bzoj3391[Usaco2004 Dec]Tree Cutting网络破坏*
bzoj3391[Usaco2004 Dec]Tree Cutting网络破坏 题意: 给一棵树,问去掉哪个点后可以使剩下的每个子树大小都小于等于节点总数的一半.n≤10000. 题解: dfs的时候 ...
最新文章
- GitHub 高速上手 ---- 创建密钥,连接
- ios 如何对UITableView中的内容进行排序
- OllyDbg 使用笔记 (二)
- JBookManager v1.00.2008314 (编辑管理您的Jar电子书)
- Alexnet论文解读及代码实现
- region实现大纲效果
- 解决overlay2存储驱动的磁盘配额问题
- ATL 工程下添加右击菜单
- 图像分辨率测试ISO12233 - 2017中文翻译
- 10本Java网站开发必看书籍
- 眨眼视频制作与生成活体视频生成
- 面向对象六大原则——依赖倒置原则
- c语言中floor有什么作用,floor函数?floor函数的使用方法?ceil函数?C语言 floor 函数...
- 东北大学计算机BAT,基于BAT-OOPN方法的污染物排放量化模型研究
- 区块链具有的8种特性
- Spring Data JPA 原理与实战第二天 掌握Repoitory和DQM
- e.g., malformed request syntax, invalid request message framing, or deceptive request routing)
- pyecharts绘制日历图、漏斗图、仪表盘、水滴图
- codeforce 427 C. Checkposts(tarjan 强连通分量)
- 飞腾S2500平台PCIe SWITCH下热插拔验证