每日刷題(二分圖,二分查找,dfs搜索)

目錄

1.P3853 [TJOI2007] 路標設置

2.P1129 [ZJOI2007] 矩陣游戲

3.P1330 封鎖陽光大學

?4.Trees

5.P1141 01迷宮


1.P3853 [TJOI2007] 路標設置

P3853 [TJOI2007] 路標設置 - 洛谷 | 計算機科學教育新生態 (luogu.com.cn)

先求出每個路標之間的距離,再二分查找每個mid,如果有間距大于mid的,那我們就設立路標,到最后,看新設置的路標數量是否在要求的范圍之內。

#include<iostream>
#include<algorithm>
#include<queue>
#include<math.h>
#include<cstring>
#include<map>
#define ll long long
#define TEST int T;cin>>T;while(T--)
#define lowbit(x) x&(-x)
using namespace std;
const int N = 2000100;
const int M = 1e8 + 7;
int base1 = 131, base2 = 13311;
ll w, n, k;
ll a[N];
bool check(ll x) {ll ans = 0;for (int i = 1; i < n; i++) {if(a[i]>x){ans+=(a[i]-1)/x;}}return ans<=k;
}
void solve() {cin >> w >> n >> k;for (int i = 1; i <= n; i++) cin >> a[i];sort(a + 1, a + 1 + n);for (int i = 1; i <= n - 1; i++) a[i] = a[i + 1] - a[i];ll L = 1, R = w, mid;while (L < R) {mid = L + R >> 1;if (check(mid)) {R = mid ;} else L = mid+1;}cout << R << "\n";
}
int main() {solve();return 0;
}

2.P1129 [ZJOI2007] 矩陣游戲

P1129 [ZJOI2007] 矩陣游戲 - 洛谷 | 計算機科學教育新生態 (luogu.com.cn)

其實就是二部圖的最大匹配,在我們給出的矩陣中,我們給(i,j)建邊,當找到的最大匹配大于等于n時,那就說明可以組成一條主對角線的元素都為1。

我們這里用到匈牙利算法。

#include<iostream>
#include<algorithm>
#include<queue>
#include<math.h>
#include<cstring>
#include<map>
#define ll long long
#define TEST int T;cin>>T;while(T--)
#define lowbit(x) x&(-x)
using namespace std;
const int N = 100010;
const int M = 200010;
int base1 = 131, base2 = 13311;
ll n, m, head[N], cnt, colour[N], match[N], v[N];
struct Node {int u, v;
} e[N];
void add(int u, int v) { //鏈式前向星存圖e[++cnt].u = v;e[cnt].v = head[u];head[u] = cnt;
}
void bak()
{for(int i=0;i<=n;i++){e[i].u=e[i].v=v[i]=match[i]=head[i]=0;}cnt=0;
}
bool dfs(int p,int tag)
{if(v[p]==tag) return false;v[p]=tag;for(int i=head[p];i;i=e[i].v){int pos=e[i].u;if(!match[pos]||dfs(match[pos],tag)){match[pos]=p;return true;}}return false;
}
void solve() {cin>>n;for (int i = 1, x; i <= n; i++) {for (int j = 1; j <= n; j++) {cin >> x;if (x) add(i, j );}}ll ans = 0;for (int i = 1; i <= n; i++) {if (dfs(i,i)) ans++;}if (ans >= n) cout << "Yes\n";else cout << "No\n";bak();
}
int main() {TESTsolve();return 0;
}

3.P1330 封鎖陽光大學

P1330 封鎖陽光大學 - 洛谷 | 計算機科學教育新生態 (luogu.com.cn)

首先判斷是否構成二分圖,用染色法每次遍歷的時候,答案累加上此時染成兩個集合中元素的最小值。

最后輸出答案。

#include<iostream>
#include<algorithm>
#include<queue>
#include<math.h>
#include<cstring>
#include<map>
#define ll long long
#define TEST int T;cin>>T;while(T--)
#define lowbit(x) x&(-x)
using namespace std;
const int N = 100010;
const int M = 200010;
int base1 = 131, base2 = 13311;
ll n, m, head[N], cnt, colour[N], match[N], v[N], Ans[4];
struct Node {int u, v;
} e[N];
void add(int u, int v) { //鏈式前向星存圖e[++cnt].u = v;e[cnt].v = head[u];head[u] = cnt;
}
bool find1(int x, int tag) {colour[x] = tag;Ans[tag]++;for (int i = head[x]; i; i = e[i].v) {int pos = e[i].u;if (!colour[pos]) {if (!find1(pos, 3 - tag)) return false;} else {if (colour[pos] == tag) return false;}}return true;
}
void solve() {cin >> n >> m;for (int u, v; m; m--) {cin >> u >> v;add(u, v);add(v, u);}ll ans = 0;for (int i = 1; i <= n; i++) {Ans[1] = 0, Ans[2] = 0;if (!colour[i]) {if (!find1(i, 1)) {cout << "Impossible\n";return;}}ans += min(Ans[2], Ans[1]);}cout << ans << "\n";
}
int main() {solve();return 0;
}

?4.Trees

2665 -- Trees (poj.org)

先將每個起點和終點排序,安裝具體情況更新L和R,最后答案減去(R-L+1)。

#include<iostream>
#include<algorithm>
#include<queue>
#include<math.h>
#include<cstring>
#include<map>
#define ll long long
#define TEST int T;cin>>T;while(T--)
#define lowbit(x) x&(-x)
using namespace std;
const int N = 5010;
const int M = 200010;
int base1 = 131, base2 = 13311;
ll n, m, head[N], cnt, colour[N], match[N], v[N];
struct Node {ll u, v;
} e[N];
bool cmp(Node a, Node b) {if (a.u == b.u) return a.v < b.v;return a.u < b.u;
}
void solve() {while (cin >> n >> m) {if(n==m&&n==0) break;for (int i = 1; i <= m; i++) {cin >> e[i].u >> e[i].v;if (e[i].u > e[i].v) swap(e[i].u, e[i].v);}sort(e + 1, e + 1 + m, cmp);ll ans = n + 1;ll L = e[1].u, R = e[1].v;for (int i = 2; i <= m; i++) {if (e[i].u <= R) {R = e[i].v;continue;}if (e[i].u > R) {ans -= (R - L + 1);L = e[i].u;R = e[i].v;continue;}}cout << (ans - R + L - 1) << "\n";}
}int main() {solve();return 0;
}

5.P1141 01迷宮

P1141 01迷宮 - 洛谷 | 計算機科學教育新生態 (luogu.com.cn)

我們知道,就是尋找按照要求的聯通塊,我們可以用dfs遍歷,這樣詢問時,只需要找到這個位置在哪個聯通塊里面,每個聯通塊的權重就是聯通塊內元素的數量。

#include<iostream>
#include<algorithm>
#include<queue>
#include<math.h>
#include<cstring>
#include<map>
#define ll long long
#define TEST int T;cin>>T;while(T--)
#define lowbit(x) x&(-x)
using namespace std;
const int N = 2000100;
const int M = 1e8 + 7;
int base1 = 131, base2 = 13311;
char mp[1001][1001];
int ans[1001][1001];
int dx[]={1,-1,0,0};
int dy[]={0,0,1,-1};
map<ll,ll>f;
int cnt=0;
ll n,m;
void dfs(int x,int y,char tag)
{if(x<1||y<1||x>n||y>n) return;ans[x][y]=cnt;f[cnt]++;for(int i=0;i<4;i++){int tx=x+dx[i];int ty=y+dy[i];if(!ans[tx][ty]&&mp[tx][ty]=='1'-mp[x][y]+'0'){dfs(tx,ty,'1'-mp[x][y]+'0');}}}
void solve() {cin>>n>>m;for(int i=1;i<=n;i++){for(int j=1;j<=n;j++){cin>>mp[i][j];}}for(int i=1,x,y;i<=m;i++){cin>>x>>y;if(ans[x][y]) cout<<f[ans[x][y]]<<"\n";else cnt++,dfs(x,y,mp[x][y]),cout<<f[cnt]<<"\n";}
}
int main() {solve();return 0;
}

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

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

相關文章

新媒體運營都需要掌握哪些技術?沈陽新媒體運營免費培訓

新媒體運營需要掌握的技術包括內容創作、FAB產品介紹法、用戶運營、社群運營、活動策劃和數據分析。這個崗位在現代社會中的重要性日益突出&#xff0c;隨著互聯網的發展&#xff0c;新媒體已成為人們獲取信息的主要渠道之一&#xff0c;而新媒體運營則是通過各種新媒體平臺進行…

數據庫系統原理練習 | 作業2-第2章關系數據庫(附答案)

整理自博主本科《數據庫系統原理》專業課完成的課后作業&#xff0c;以便各位學習數據庫系統概論的小伙伴們參考、學習。 *文中若存在書寫不合理的地方&#xff0c;歡迎各位斧正。 專業課本&#xff1a; 目錄 一、選擇題 二、填空題 三、簡答題 四、關系代數 1.課本p70頁&…

hive中reverse函數

目錄 前言基本函數介紹實戰 前言 reverse函數&#xff0c;是一個常用的字符串處理函數&#xff0c;很多編程語言都有。最近開發中&#xff0c;遇到一個reverse解決的需求&#xff0c;發現自己尚未總結過&#xff0c;遂補上。 基本函數介紹 SELECT reverse(string_column) FR…

虛擬機安裝Linux CENTOS 07 部署NET8 踩坑大全

首先下載centos07鏡像&#xff0c;建議使用阿里云推薦的地址&#xff1a; https://mirrors.aliyun.com/centos/7.9.2009/isos/x86_64/?spma2c6h.25603864.0.0.59b5f5ad5Nfr0X 其實這里就已經出現第一個坑了 centos 07 /usr/lib64/ 的 libstdc.so只支持到19&#xff1b; GLI…

數據湖表格式 Hudi/Iceberg/DeltaLake/Paimon TPCDS 性能對比(Spark 引擎)

當前&#xff0c;業界流行的集中數據湖表格式 Hudi/Iceberg/DeltaLake&#xff0c;和最近出現并且在國內比較火的 Paimon。我們現在看到的很多是針對流處理場景的讀寫性能測試&#xff0c;那么本篇文章我們將回歸到大數據最基礎的場景&#xff0c;對海量數據的批處理查詢。本文…

Java中的線程同步機制有哪些?

Java中的線程同步機制是一套用于協調線程間的數據訪問及活動的機制&#xff0c;該機制用于保障線程安全以及實現這些線程的共同目標。Java平臺提供的線程同步機制主要包括以下幾個方面&#xff1a; 1. 鎖&#xff08;Lock&#xff09; 鎖是Java中最基本的線程同步機制之一&am…

飛書、釘釘、企業微信的大模型“三國殺”

文&#xff1a;互聯網江湖 作者&#xff1a;劉致呈 曾經在一次內部的周年會上&#xff0c;字節跳動CEO梁汝波曾表示對飛書和火山引擎的研發投入不低于抖音和TikTok。言下之意&#xff0c;飛書在字節內部的重要性比肩抖音。 業務的重要性從時間上也看得出來&#xff0c;要知道…

靜態時序分析:Leaf Cell(葉單元)

相關閱讀???????靜態時序分析https://blog.csdn.net/weixin_45791458/category_12567571.html 在DC中&#xff0c;leaf cell&#xff08;葉單元&#xff09;有時會出現在描述中&#xff0c;例如set_input_delay的-reference_pin選項的參數&#xff0c;就必須是一個端口或…

C# Winform之propertyGrid控件使用詳解和分組設置

PropertyGrid 控件在 WinForms 中是一個非常有用的工具&#xff0c;它允許用戶查看和編輯一個對象的屬性。這個控件非常適合用于配置對話框或任何需要動態顯示對象屬性的地方。下面我會詳細介紹 PropertyGrid 的使用方法和如何對屬性進行分組。 使用詳解 1. 添加 PropertyGri…

《昇思25天學習打卡營第18天|onereal》

RNN實現情感分類 概述 情感分類是自然語言處理中的經典任務&#xff0c;是典型的分類問題。本節使用MindSpore實現一個基于RNN網絡的情感分類模型&#xff0c;實現如下的效果&#xff1a; 輸入: This film is terrible 正確標簽: Negative 預測標簽: Negative輸入: This film…

AI版Siri要明年見,研究表明ChatGPT暫無法取代程序員,Kimi推出瀏覽器插件

ChatGPT狂飆160天&#xff0c;世界已經不是之前的樣子。 更多資源歡迎關注 根據彭博社記者馬克古爾曼的最新消息&#xff0c;蘋果公司今年不會推出全新的Apple Intelligence驅動的Siri&#xff0c;該公司計劃在明年1月開始測試&#xff0c;并在iOS 18.4中才推出正式版本。 此前…

景聯文科技以高質量多模態數據集賦能AI大模型,精準匹配提升模型性能

在人工智能的浪潮中&#xff0c;語料數據如同建筑的基石&#xff0c;其質量、規模和運用策略直接決定了AI模型的表現和應用的廣泛性。 景聯文科技在AI領域深耕多年&#xff0c;打磨了高質量多模態數據集&#xff0c;致力于為不同訓練階段的算法精準匹配高質量數據資源。 3000萬…

STM32中斷(NVIC和EXIT)

CM3 內核支持 256 個中斷&#xff0c;其中包含了 16 個內核中斷和 240個外部中斷&#xff0c;并且具有 256 級的可編程中斷設置。但STM32 并沒有使用CM3內核的全部東西&#xff0c;而是只用了它的一部分。STM32有 76 個中斷&#xff0c;包括16 個內核中斷和 60 個可屏蔽中斷&am…

Dify中的RAG和知識庫

一.RAG 基本架構 當用戶提問 “美國總統是誰&#xff1f;” 時&#xff0c;系統并不是將問題直接交給大模型來回答&#xff0c;而是先將用戶問題在知識庫中進行向量搜索&#xff0c;通過語義相似度匹配的方式查詢到相關的內容&#xff08;拜登是美國現任第46屆總統…&#xff0…

對比多種方法執行命令行命令

在這兩種方法中&#xff0c;一種是使用argparse模塊來模擬命令行參數的解析&#xff0c;另一種是使用subprocess模塊來直接執行一個命令行命令。下面是對兩種方法的詳細比較&#xff1a; 使用argparse模擬命令行參數 這種方法主要用于在Python腳本內部測試或集成其他使用argp…

深入剖析C++的 “屬性“(Attribute specifier sequence)

引言 在閱讀開源項目源代碼是&#xff0c;發現了一個有趣且特殊的C特性&#xff1a;屬性。 屬性&#xff08;attribute specifier sequences&#xff09;是在C11標準引入的。在C11之前&#xff0c;編譯器特有的擴展被廣泛用來提供額外的代碼信息。例如&#xff0c;GNU編譯器&…

AcWing 3587:連通圖 ← dfs(鄰接矩陣 or 鏈式前向星)

【題目來源】https://www.acwing.com/problem/content/3590/【題目描述】 給定一個無向圖和其中的所有邊&#xff0c;判斷這個圖是否所有頂點都是連通的。【輸入格式】 輸入包含若干組數據。 每組數據第一行包含兩個整數 n 和 m&#xff0c;表示無向圖的點和邊數。 接下來 m 行…

Java面試題系列 - 第5天

題目&#xff1a;Java Lambda表達式與Stream API的深度應用 背景說明&#xff1a;Java 8引入了Lambda表達式和Stream API&#xff0c;極大地提升了Java函數式編程的能力&#xff0c;使代碼更簡潔、更易讀。掌握Lambda表達式和Stream API的使用&#xff0c;對于優化數據處理流程…

Qt/C++項目積累: 2.主機監控器 - 2.2 歷史功能實現

修訂歷史&#xff1a; 20240711&#xff1a;初始表設計&#xff0c;采用sqlite 正文&#xff1a; 關于歷史數據存儲&#xff0c;考慮的是用數據庫來完成&#xff0c;目前考慮使用Sqlite和mysql&#xff0c;先用sqlite來實現&#xff0c;設計表過程如下&#xff1a; 機器總覽…

白騎士的C++教學進階篇 2.1 指針與引用

系列目錄 上一篇&#xff1a;白騎士的C教學基礎篇 1.5 數據結構 指針和引用是C中非常重要的概念&#xff0c;它們提供了強大的功能&#xff0c;使程序員能夠直接操作內存&#xff0c;提高程序的效率和靈活性。在本篇博客中&#xff0c;我們將深入探討指針與引用的基礎知識&…