洛谷P1514 [NOIP 2010 提高組] 引水入城

洛谷P1514 [NOIP 2010 提高組] 引水入城

洛谷題目傳送門

題目背景

NOIP2010 提高組 T4

題目描述

在一個遙遠的國度,一側是風景秀美的湖泊,另一側則是漫無邊際的沙漠。該國的行政區劃十分特殊,剛好構成一個 NNNMMM 列的矩形,如上圖所示,其中每個格子都代表一座城市,每座城市都有一個海拔高度。

為了使居民們都盡可能飲用到清澈的湖水,現在要在某些城市建造水利設施。水利設施有兩種,分別為蓄水廠和輸水站。蓄水廠的功能是利用水泵將湖泊中的水抽取到所在城市的蓄水池中。

因此,只有與湖泊毗鄰的第 111 行的城市可以建造蓄水廠。而輸水站的功能則是通過輸水管線利用高度落差,將湖水從高處向低處輸送。故一座城市能建造輸水站的前提,是存在比它海拔更高且擁有公共邊的相鄰城市,已經建有水利設施。由于第 NNN 行的城市靠近沙漠,是該國的干旱區,所以要求其中的每座城市都建有水利設施。那么,這個要求能否滿足呢?如果能,請計算最少建造幾個蓄水廠;如果不能,求干旱區中不可能建有水利設施的城市數目。

輸入格式

每行兩個數,之間用一個空格隔開。輸入的第一行是兩個正整數 N,MN,MN,M,表示矩形的規模。接下來 NNN 行,每行 MMM 個正整數,依次代表每座城市的海拔高度。

輸出格式

兩行。如果能滿足要求,輸出的第一行是整數 111,第二行是一個整數,代表最少建造幾個蓄水廠;如果不能滿足要求,輸出的第一行是整數 000,第二行是一個整數,代表有幾座干旱區中的城市不可能建有水利設施。

輸入輸出樣例 #1

輸入 #1

2 5
9 1 5 4 3
8 7 6 1 2

輸出 #1

1
1

輸入輸出樣例 #2

輸入 #2

3 6
8 4 5 6 4 4
7 3 4 3 3 3
3 2 2 1 1 2

輸出 #2

1
3

說明/提示

樣例 1 說明

只需要在海拔為 999 的那座城市中建造蓄水廠,即可滿足要求。

樣例 2 說明

上圖中,在 $3 $ 個粗線框出的城市中建造蓄水廠,可以滿足要求。以這 $3 $ 個蓄水廠為源頭在干旱區中建造的輸水站分別用 333 種顏色標出。當然,建造方法可能不唯一。

數據范圍

本題有 10 個測試數據,每個數據的范圍如下表所示:

測試數據編號能否滿足要求N≤N\leNM≤M\leM
1不能101010101010
2不能100100100100100100
3不能500500500500500500
4111101010
5101010101010
6100100100202020
7100100100505050
8100100100100100100
9200200200200200200
10500500500500500500

對于所有 10 個數據,每座城市的海拔高度都不超過 10610^6106

思路詳解

我們發現,一條河流可以流到的干旱城市是固定的,考慮直接將他預處理出來。我們發現倘使一條河流對應一個連續區間,那我們直接貪心即可,但如果不呢???如果問題不能解決,那考慮如何解決掉問題。考慮如何證明一定是一條連續區間。

連續區間

對于無解的情況,我們肯定不需要討論,因為我們可以直接標記。那對于有解的情況,如何證明每個河流對應的一定是一個連續區間的。考慮使用反證法,如下圖:
在這里插入圖片描述
假如xxx可以流到下端藍線除了紅點的城市,由于有解,則必有如下城市可以到達紅點:
在這里插入圖片描述
我們發現xxxyyy的流徑一定有交點,不然yyy不可能憑空到達紅點。那么你yyy都可以走,則xxx肯定可以走到,那xxx流經地區一定是一個連續區間,那接下來就好辦了。

大致思路

大致思路如下:

  1. 我們先以每個河流為起點,深搜求解每個河流可以流經的區間。
  2. 然后在檢查干旱城市是否都可以被灌溉,如果不是統計有多少個,輸出即可。
  3. 如果都可以,則對應每個區間,我們以已有區間右邊界的右邊一個為起點,若新區間的的左端點小于等于起點,則取右端點的最大值為新的右邊界。

code:

#include<bits/stdc++.h>
using namespace std;
const int N=505;
int n,m;
int a[N][N],vis[N][N];
struct node{int x,y;
}c[N][N];//c[i][j]為從(i,j)開始可以流到的區間
int dx[5]={0,0,1,-1};
int dy[5]={1,-1,0,0};
int jsq=0;
void dfs(int bx,int by){//深搜求解vis[bx][by]=1;for(int i=0;i<4;i++){auto [qx,qy]=(node){bx+dx[i],by+dy[i]};if(qx<1||qx>n||qy<1||qy>m||a[qx][qy]>=a[bx][by])continue;if(!vis[qx][qy]){//注意,訪問過的點也可以更新他的值vis[qx][qy]=1;dfs(qx,qy);}c[bx][by].x=min(c[bx][by].x,c[qx][qy].x);c[bx][by].y=max(c[bx][by].y,c[qx][qy].y);}
}
int ans=0;
int main(){ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);cin>>n>>m;for(int i=1;i<=n;i++){for(int j=1;j<=m;j++)c[i][j].x=0x3f3f3f3f;}//賦初值for(int i=1;i<=n;i++){for(int j=1;j<=m;j++){cin>>a[i][j];if(i==n)c[i][j]={j,j};//邊界}}for(int i=1;i<=m;i++){//枚舉并深搜if(!vis[1][i])dfs(1,i);}for(int i=1;i<=m;i++)if(!vis[n][i])ans++;//記錄有多少個點流不到if(ans>0){//有城市流不到cout<<0<<'\n'<<ans;}else{cout<<1<<'\n';ans=0;int l=1,r=0;while(l<=m){//貪心for(int i=1;i<=m;i++){if(c[1][i].x<=l)r=max(r,c[1][i].y);}l=r+1;ans++;}cout<<ans;}return 0;
}

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/913792.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/913792.shtml
英文地址,請注明出處:http://en.pswp.cn/news/913792.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

【unity小技巧】國內Unity6下載安裝和一些Unity6新功能使用介紹

文章目錄前言一、安裝1、國外下載2、國內下載二、常用的新功能變化1、官方推薦使用inputsystem進行輸入控制2、修復了InputSystem命名錯誤導致listen被遮擋的bug3、自帶去除unity啟動畫面logo功能4、unity官方的behavior行為樹插件5、linearVelocity代替過時的velocity方法6、隨…

Rust 中字符串類型區別解析

在 Rust 中&#xff0c;"hello" 和 String::from("hello") 都表示字符串&#xff0c;但它們在內存表示、所有權和可變性上有本質區別&#xff1a;1. 類型與內存表示"hello" (字符串字面量)&#xff1a;類型為 &str&#xff08;字符串切片引用…

springMVC05-異常處理器

在 SpringMVC 中&#xff0c;異常處理是一個非常重要的功能&#xff0c;它可以讓你優雅地處理程序拋出的各種異常&#xff0c;向用戶展示友好的提示&#xff0c;而不是顯示一堆報錯信息&#xff08;如 500 頁面&#xff09;。一、SpringMVC的異常處理器返回的是ModelAndView&am…

安裝 Elasticsearch IK 分詞器

安裝 Elasticsearch IK 分詞器&#xff08;手動 .zip/.zip 安裝&#xff09; IK 分詞器&#xff08;IK Analysis&#xff09;是 Elasticsearch 最常用的中文分詞插件&#xff0c;支持 細粒度分詞&#xff08;ik_max_word&#xff09; 和 智能切分&#xff08;ik_smart&#xf…

數據庫系統原理實驗1:創建數據庫、數據表及單表查詢

一、實驗目的1&#xff0e;掌握在SQL Server中使用對象資源管理器和SQL命令創建數據庫與修改數據庫的方法。2&#xff0e;掌握在SQL Server中使用對象資源管理器或者SQL命令創建數據表和修改數據表的方法&#xff08;以SQL命令為重點&#xff09;。3&#xff0e;掌握無條件查詢…

【STM32】ADC模數轉換基本原理(提供完整實例代碼)

這篇文章是嵌入式中我通過大量資料 整合成了一份 系統完整、層次清晰的 ADC 模數轉換原理解析 文檔。 這里系統地梳理了 STM32F1 系列 ADC 模數轉換的核心資料&#xff0c;包括&#xff1a; 1.原理 特性 2.通道配置 3.模式選擇&#xff08;單次/連續/掃描&#xff09; 4.關鍵寄…

圖神經網絡 gnn 應用到道路網絡拓撲結構與交通碳排放相關性。,拓撲指標量化、時空關聯模型及演化機制分析

針對您提出的“道路網絡拓撲結構與交通碳排放相關框架&#xff0c;以下結合研究目標、數據與方法進行系統性深化設計&#xff0c;重點強化拓撲指標量化、時空關聯模型及演化機制分析&#xff1a;一、核心研究問題深化 靜態關聯&#xff1a;不同拓撲結構&#xff08;方格網/環射…

7.6 優先隊列| dijkstra | hash | rust

lc1337pair存入&#xff0c;lambda sort后取出&#xff0c;最開始想用hash&#xff0c;寫一半感覺寫復雜了class Solution {public:vector<int> kWeakestRows(vector<vector<int>>& mat, int k) {int m mat.size();int n mat[0].size();vector<pair…

最新 HarmonyOS API 20 知識庫 重磅推出

最新 HarmonyOS API 20 知識庫 重磅推出 前言 最近整理下 華為開發者聯盟最新的 API 20的鴻蒙應用開發文檔&#xff0c;這次的API 20 相比較之前的文檔&#xff0c;要多了不少內容&#xff0c;目前整理后是9000千多篇&#xff0c;不容易呀。 如何使用 基于騰訊的知識庫工具 …

uniapp 監聽物理返回按鈕

import {onShow,onHide,onLoad,onReady,onBackPress} from "dcloudio/uni-app"onBackPress((e) > {showLog("返回按鈕觸發")if(e.frombackbutton){//開始干活}})參數說明屬性類型說明fromString觸發返回行為的來源&#xff1a;backbutton——左上角導航…

多線程(2)

多線程&#xff08;2&#xff09; &#x1f534;&#x1f7e0;&#x1f7e1;&#x1f7e2;&#x1f535;&#x1f7e3;&#x1f534;&#x1f534;&#x1f7e0;&#x1f7e1;&#x1f7e2;&#x1f535;&#x1f7e3;&#x1f534;&#x1f534;&#x1f7e0;&#x1f7e1;&am…

網關助力航天噴涂:Devicenet與Modbus TCP的“跨界對話“

在航空航天領域&#xff0c;飛機、航天器的制造過程有著極高的精度與安全性要求。以飛機、航天器表面噴涂作業為例&#xff0c;不僅要進行嚴格的防腐蝕處理&#xff0c;而且對表面光滑度要求極高&#xff0c;這直接關系到飛行器的空氣動力學性能和使用壽命。為確保作業安全與質…

從傳統項目管理到敏捷DevOps:如何轉向使用DevOps看板工具進行工作流管理

在DevOps實踐中&#xff0c;DevOps看板工具成為了開發與運維團隊之間高效協作的關鍵。隨著企業對敏捷開發和持續交付的需求日益增長&#xff0c;DevOps看板工具通過可視化的管理方法&#xff0c;幫助團隊在繁雜的任務中保持高效的工作節奏和清晰的進度跟蹤。 具體而言&#xff…

【leetcode100】下一個排列

1、題目描述 整數數組的一個 排列 就是將其所有成員以序列或線性順序排列。 例如&#xff0c;arr [1,2,3] &#xff0c;以下這些都可以視作 arr 的排列&#xff1a;[1,2,3]、[1,3,2]、[3,1,2]、[2,3,1] 。 整數數組的 下一個排列 是指其整數的下一個字典序更大的排列。更正…

Flink-Source算子狀態恢復分析

背景 修改 source 算子 kafka_old_topic 消費任務運行一段時間后&#xff0c;暫停狀態并保留。然后將 uid 和 topic 都改了&#xff0c;消費者 offset 會從 earliest 開始。 // before FlinkKafkaConsumer consumer KafkaConfig.getConsumer("kafka_old_topic");…

IDEA中application.yml配置文件不自動提示解決辦法

今天在自己的電腦上使用IDEA的時候&#xff0c;發現在application配置文件里面輸入配置項的時候沒有提示&#xff0c;網上找了一圈也沒解決&#xff0c;最后自己試出來了。 解決辦法&#xff1a; 鼠標移動到配置文件上&#xff0c;單擊右鍵-重寫文件類型、選擇YAML(捆綁)&#…

Vite 完整功能詳解與 Vue 項目實戰指南

Vite 完整功能詳解與 Vue 項目實戰指南 Vite 是下一代前端開發工具&#xff0c;由 Vue 作者尤雨溪開發&#xff0c;提供極速的開發體驗和高效的生產構建。以下是完整功能解析和實戰示例&#xff1a;一、Vite 核心功能亮點閃電般冷啟動 基于原生 ES 模塊&#xff08;ESM&#xf…

Vue 3 中使用路由參數跳轉時 watch 觸發重復請求問題詳解

&#x1f4d8;Vue 3 中使用路由參數跳轉時 watch 觸發重復請求問題詳解&#x1f516; 收藏 點贊 關注&#xff0c;掌握 Vue 3 路由參數監聽中的隱藏陷阱&#xff0c;避免詳情頁、嵌套路由頁誤觸發重復請求&#xff01;&#x1f9e9; 一、問題背景 在 Vue 3 項目中&#xff0c…

前端 項目更新通知 (plugin-web-update-notification)

項目版本更新迭代時&#xff0c;需提示用戶更新系統&#xff0c;不然早時間不更新對用戶體驗很不好&#xff0c;所以在每次部署后需要提示用戶&#xff0c;刷新靜態資源。推薦插件 plugin-web-update-notification .具體配置 vite.config.js文件中 import { webUpdateNotice …

【力扣(LeetCode)】數據挖掘面試題0002:當面對實時數據流時您如何設計和實現機器學習模型?

文章大綱一、實時數據處理&#xff1a;構建低延遲的數據管道1. 數據接入與緩沖2. 實時清洗與校驗3. 特征標準化與對齊二、模型設計&#xff1a;選擇適配實時場景的模型架構1. 模型選擇原則三、訓練與更新策略&#xff1a;離線與在線協同&#xff0c;應對概念漂移1. 離線-在線協…