算法題(188):團伙

審題:

本題需要我們通過解析所有人之間的關系,從而判斷出朋友團體的總個數并輸出

思路:

方法一:擴展域并查集

由于這里涉及對朋友/敵人等關系集合的頻繁操作,所以我們需要使用并查集來操作,但是普通的并查集只有一種集合域,也就是只能維護一種關系。這里有兩種關系存在,常規并查集已經無法滿足要求,所以我們需要使用擴展域并查集

補充:擴展域并查集

相比于普通并查集來說,這種并查集可以維護更多的關系,具體的實現邏輯如下

1.將fa數組的集合域分為朋友域和敵人域

朋友域為1~n,敵人域為1+n~n+n

2.對于x元素來說,和x在同一個集合的是朋友,和x+n在同一個集合的是敵人

講解操作過程:

假設現在人數n為3,1和2是敵人,2和3是敵人。

接下來我們按照擴展域并查集的邏輯進行模擬操作

由于1和2是敵人,所以我們將1和2的敵人域連起來,將2和1的敵人域連起來,同理后面2和3也近似操作

按照題意,敵人的敵人就是朋友,所以1和3應該是朋友。而我們看到經過前面的操作,1和3處于同一個集合,滿足題意,方法成立

解題:
?

#include<iostream>
using namespace std;
const int N = 1010;
int n, m;
int fa[N * 2];
int find(int x)
{return fa[x] == x ? x : fa[x] = find(fa[x]);
}
void un(int x, int y)//讓朋友域當根節點
{fa[find(x)] = find(y);
}int main()
{cin >> n >> m;//初始化擴展并查集for (int i = 1; i <= 2 * n; i++){fa[i] = i;}//建立關系for (int i = 1; i <= m; i++){char x;int y, z;cin >> x >> y >> z;if (x == 'E')//敵人關系{un(z + n, y);un(y + n, z);}else//朋友關系{un(y, z);}}//查詢團伙數int ret = 0;for (int i = 1; i <= n; i++){if (fa[i] == i) ret++;}cout << ret << endl;return 0;
}

注意:

1.題目中只說了兩個條件:一個是敵人的敵人是朋友,另一個是朋友的朋友是朋友。

但是沒有說朋友的敵人是不是敵人,敵人的朋友是不是敵人,所以我們不需要進行特別的其他操作

2.由于實際上存在的人數是n,敵人域是我們自己構建的,所以我們最后統計團伙的時候不能統計到敵人域,只需要統計前n個即可

3.由于我們統計的是朋友域,所以我們的根節點一定要是朋友域的節點,否則就無法統計到了,在傳參給un函數的時候要注意順序

P1892 [BalticOI 2003] 團伙 - 洛谷

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

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

相關文章

C++開發/Qt開發:單例模式介紹與應用

單例模式是軟件設計模式中最簡單也是最常用的一種創建型設計模式。它的核心目標是確保一個類在整個應用程序生命周期中只有一個實例&#xff0c;并提供一個全局訪問點。筆者白話版理解&#xff1a;你創建了一個類&#xff0c;如果你希望這個類對象在工程中應用時只創建一次&…

Linux筆記---策略模式與日志

1. 設計模式設計模式是軟件開發中反復出現的問題的通用解決方案&#xff0c;它是一套套被反復使用、多數人知曉、經過分類編目的代碼設計經驗總結。設計模式并非具體的代碼實現&#xff0c;而是針對特定問題的抽象設計思路和方法論。它描述了在特定場景下&#xff0c;如何組織類…

關于多個el-input的自動聚焦,每輸入完一個el-input,自動聚焦到下一個

講解原理或者思路&#xff1a;如果你有多個el-input,想要實現每輸入完一個輸入框&#xff0c;然后自動聚焦到下一個輸入框&#xff0c;同理&#xff0c;如果每刪除一個輸入框的值&#xff0c;自動聚焦到上一個輸入框。條件那么首先要做的就是&#xff0c;設置條件&#xff0c;在…

AI 賦能教育變革:機遇、實踐與展望

引言說明教育在社會發展中的重要地位&#xff0c;以及傳統教育面臨的困境。引出 AI 技術為教育變革帶來新機遇&#xff0c;闡述研究其在教育中應用的價值。AI 為教育帶來的機遇個性化學習支持&#xff1a;講解 AI 通過分析學生學習數據&#xff0c;如答題情況、學習時間等&…

(一)八股(數據庫/MQ/緩存)

文章目錄 項目地址 一、數據庫 1.1 事務隔離級別 1. 事務的四大特性 2. Read Uncommited臟讀(未提交讀) 3. Read Commited幻讀(sql默認已提交讀) 4. Repeatable Read 5. Serializable 6. Snapshot(快照隔離) 7. 代碼開啟 8. For update和Repeatable Read的區別 1.2 各種鎖 …

STM32H750 CoreMark跑分測試

STM32H750 CoreMark跑分測試&#x1f50e;CoreMark跑分測試查詢網站&#xff1a;https://www.eembc.org/coremark/scores.php&#x1f4dc; CoreMark源碼&#xff1a;https://www.github.com/eembc/coremarkCoreMark移植和配置參考&#xff1a;https://community.st.com/t5/stm…

RabbitMQ如何確保消息發送和消息接收

消息發送確認 1 ConfirmCallback方法 ConfirmCallback 是一個回調接口&#xff0c;消息發送到 Broker 后觸發回調&#xff0c;確認消息是否到達 Broker 服務器&#xff0c;也就是只 確認是否正確到達 Exchange 中。 2 ReturnCallback方法 通過實現 ReturnCallback 接口&#xf…

Linux:進程間通信-管道

Linux&#xff1a;進程間通信-管道 前言&#xff1a;為什么需要進程間通信&#xff1f; 你有沒有想過&#xff0c;當你在電腦上同時打開瀏覽器、音樂播放器和文檔時&#xff0c;這些程序是如何協同工作的&#xff1f;比如&#xff0c;瀏覽器下載的文件&#xff0c;為什么能被文…

Jmeter + FFmpeg 直播壓測遇到的問題及解決方案

1、壓測機安裝FFmpeg&#xff0c;下載安裝步驟可見&#xff1a;https://zhuanlan.zhihu.com/p/692019886 2、Jmeter與FFmpeg位數要一致&#xff0c;不允許在32位的進程中運行一個64位的程序&#xff0c;反之亦然 3、OS進程取樣器&#xff08;Thread Group -> Add -> Sa…

安卓app、微信小程序等訪問多個api時等待提示調用與關閉問題

安卓app、微信小程序訪問webapi&#xff0c;將需要一時間&#xff0c;我們稱之為耗時操作&#xff0c;其它諸如密集型計算、訪問文件與設備等亦是如此。在這個期間我們應該跳出提示&#xff0c;告知用戶正在等待&#xff0c;并且很多時候&#xff0c;在等待時不允許用戶再對UI進…

一個狀態機如何啟動/停止另一個狀態機

一個狀態機如何啟動/停止另一個狀態機 這個過程主要依賴于動作列表&#xff08;Action List&#xff09; 中的特定動作項和狀態管理服務&#xff08;ARA::SM&#xff09;提供的API。 1. 通過動作列表&#xff08;Action List&#xff09;進行預配置控制 這是最常見的方式&#…

基于IPO智能粒子優化的IIR濾波器參數識別算法matlab仿真

目錄 1.程序功能描述 2.測試軟件版本以及運行結果展示 3.部分程序 4.算法理論概述 5.完整程序 1.程序功能描述 IIR&#xff08;Infinite Impulse Response&#xff09;濾波器即無限沖激響應濾波器&#xff0c;其輸出不僅與當前和過去的輸入有關&#xff0c;還與過去的輸出…

歐州服務器String 轉 double 有BUG?

string 轉 double 的常見問題通常與文化差異、格式解析或特殊值處理相關&#xff0c;而非框架本身的 “BUG”。以下是可能導致轉換異常的常見場景及解決方案&#xff1a; 文化差異導致的解析問題 現象&#xff1a;同樣的字符串&#xff08;如 “1.23” 或 “1,23”&#xff09;…

鴻蒙中網絡診斷:Network分析

上面的圖很熟悉吧 Network 面板的表格列出了所有請求&#xff0c;每一列都提供了關鍵信息&#xff1a; Name: 請求的資源名稱和路徑。 Status: HTTP 狀態碼&#xff08;診斷核心&#xff09;。200成功&#xff0c;304未修改&#xff08;緩存&#xff09;&#xff0c;404找不到…

HarmonyOS 實戰:6 種實現實時數據更新的方案全解析(含完整 Demo)

摘要 在當下的應用開發中&#xff0c;用戶體驗越來越依賴“實時性”。消息要第一時間送達、訂單狀態要立刻刷新、數據變化不能延遲……這些需求推動了“實時數據更新”成為應用的必備功能。在鴻蒙系統&#xff08;HarmonyOS&#xff09;中&#xff0c;我們既可以用系統內置的數…

第十六屆藍橋杯青少組C++省賽[2025.8.10]第二部分編程題(4、矩陣圈層交錯旋轉)

參考程序&#xff1a;#include <bits/stdc.h> using namespace std;const int MAXN 105; int a[MAXN][MAXN];int main() {int n;if (!(cin >> n)) return 0;for (int i 0; i < n; i)for (int j 0; j < n; j)cin >> a[i][j];int layers n / 2; // 每…

AI供應鏈情報預警 | 惡意Py包偽裝AI框架庫開展數據竊密及應用劫持攻擊

AI供應鏈情報概述近日&#xff08;18th Aug. , 2025&#xff09;&#xff0c;懸鏡安全情報中心在Python官方倉庫中捕獲1起偽裝成知名AI框架庫pytensor&#xff08;https://pypi.org/project/pytensor&#xff09;的組件投毒事件。在北京時間8月18日凌晨&#xff0c;投毒者連續發…

AI需要防火墻,云計算需要重新構想

Akamai創始人Tom Leighton欲終結云膨脹&#xff0c;從內到外守護AI安全 Akamai創始人Tom Leighton 當前超大規模云服務商主導著企業IT市場&#xff0c;鮮有人敢挑戰云計算經濟模式、AI基礎設施和網絡安全架構的現狀。但Akamai聯合創始人兼CEO Tom Leighton正是這樣的挑戰者。他…

線段樹詳解【數據結構】

簡介 線段樹是一種應用極其廣泛&#xff0c;使用范圍較廣并且非常知名的樹形數據結構&#xff0c;主要用于進行區間操作&#xff0c;如區間修改&#xff0c;區間查詢等。這種數據結構唯一的不足就是巨大的代碼量&#xff0c;因此處理一些較簡單的問題時建議用樹狀數組。 原理…

Maven 入門與進階:聚合、繼承與生命周期詳解

Maven 是 Java 項目管理的核心工具&#xff0c;其強大的依賴管理、項目構建和模塊化設計能力&#xff0c;極大地提升了開發效率。本文將深入探討 Maven 的 聚合&#xff08;Multi-module&#xff09;、繼承&#xff08;Inheritance&#xff09; 和 生命周期&#xff08;Lifecyc…