代碼隨想錄算法訓練營day70 | 108. 冗余連接、109. 冗余連接II

本次題目都來自卡碼網

108. 冗余連接

無向圖,返回一條可以刪去的邊,使得結果圖是一個有著N個節點的樹(即:只有一個根節點)。

  • 從前向后遍歷每一條邊(因為優先讓前面的邊連上),邊的兩個節點如果不在同一個集合,就加入集合(即:同一個根節點)。
  • 如果邊的兩個節點已經出現在同一個集合里,說明著邊的兩個節點已經連在一起了,再加入這條邊一定就出現環了。
class UnionFind:def __init__(self, n):self.n = nself.father = [0] * (n + 1)for i in range(n + 1):self.father[i] = idef find(self, u):if u == self.father[u]:return uelse:self.father[u] = self.find(self.father[u])return self.father[u]def join(self, u, v):u = self.find(u)v = self.find(v)if u == v:returnelse:self.father[u] = vdef is_same(self, u, v):u = self.find(u)v = self.find(v)return u == vif __name__ == '__main__':n = int(input())UnionFind = UnionFind(n)for i in range(n):s, t = map(int, input().strip().split())if UnionFind.is_same(s, t):print(str(s) + " " + str(t))exit()else:UnionFind.join(s, t)

109. 冗余連接II

1、先考慮節點有兩個入度的情況,其中必定有一個是冗余的

2、如果不存在1的情況,則考慮環的情況

class UnionFind:def __init__(self, n):self.n = nself.father = [0] * (n + 1)for i in range(n + 1):self.father[i] = idef find(self, u):if u == self.father[u]:return uelse:self.father[u] = self.find(self.father[u])return self.father[u]def join(self, u, v):u = self.find(u)v = self.find(v)if u == v:returnelse:self.father[u] = vdef is_same(self, u, v):u = self.find(u)v = self.find(v)return u == v# 在有向圖里找到刪除的那條邊,使其變成樹
def getRemoveEdge(edges, n):union_find = UnionFind(n)  # 初始化并查集for i in range(union_find.n):  # 遍歷所有的邊if union_find.is_same(edges[i][0], edges[i][1]):  # 構成有向環了,就是要刪除的邊print(str(edges[i][0]) + " " + str(edges[i][1]))else:union_find.join(edges[i][0], edges[i][1])# 刪一條邊之后判斷是不是樹
def isTreeAfterRemoveEdge(edges, deleteEdge, n):union_find = UnionFind(n)  # 初始化并查集for i in range(union_find.n):if i == deleteEdge:continueif union_find.is_same(edges[i][0], edges[i][1]):  # 構成有向環了,一定不是樹return Falseelse:union_find.join(edges[i][0], edges[i][1])return Trueif __name__ == '__main__':n = int(input())edges = []inDegree = [0] * (n + 1)  # 記錄節點入度for i in range(n):s, t = map(int, input().strip().split())inDegree[t] += 1edges.append((s, t))inDegree2 = []  # 記錄入度為2的邊(如果有的話就兩條邊)# 找入度為2的節點所對應的邊,注意要倒序,因為優先刪除最后出現的一條邊for i in range(n - 1, -1, -1):if inDegree[edges[i][1]] == 2:inDegree2.append(i)if len(inDegree2) > 0:# 放在inDegree2里的邊已經按照倒敘放的,所以這里就優先刪inDegree2[0]這條邊if isTreeAfterRemoveEdge(edges, inDegree2[0], n):print(str(edges[inDegree2[0]][0]) + " " + str(edges[inDegree2[0]][1]))else:print(str(edges[inDegree2[1]][0]) + " " + str(edges[inDegree2[1]][1]))exit()# 處理情況三# 明確沒有入度為2的情況,那么一定有有向環,找到構成環的邊返回就可以了getRemoveEdge(edges, n)

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

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

相關文章

【2024LLM應用-數據預處理】之如何從PDF,PPT等非結構化數據提取有效信息(結構化數據JSON)?

🥰大家知道嗎,之前在給AI大模型"喂數據"的時候,我們往往需要把非結構化數據(比如PDF、PPT、Excel等)自己手動轉成結構化的格式,這可真是太累人兒了。🥵 幸好現在有了Unstructured這個神級庫,它內置的數據提取函數可以幫我們快速高效地完成這個…

ubuntu 安裝并啟用 samba

環境:ubuntu server 24.04 步驟如下: sudo apt update sudo apt install samba修改配置文件: sudo vi /etc/samba/smb.conf新增內容: [username]path /home/[username]available yesvalid users [username]read only nobrow…

[Information Sciences 2023]用于假新聞檢測的相似性感知多模態提示學習

推薦的一個視頻:p-tuning P-tunning直接使用連續空間搜索 做法就是直接將在自然語言中存在的詞直接替換成可以直接訓練的輸入向量。本身的Pretrained LLMs 可以Fine-Tuning也可以不做。 這篇論文也解釋了為什么很少在其他領域結合知識圖譜的原因:就是因…

什么是客戶體驗自動化?

客戶體驗自動化是近年來在企業界備受關注的一個概念。那么,究竟什么是客戶體驗自動化呢?本文將為您詳細解析這一話題,幫助您更好地理解并應用客戶體驗自動化。 我們要先明確什么是客戶體驗。客戶體驗是指客戶在使用產品或服務過程中的感受和體…

Android SQLite 數據庫存學習與總結

Android 系統內置了一個名為 SQLite 數據庫。那么 SQLite 是一種什么樣的數據庫,它有那些特點,應該怎么操作它?下面,讓我們就來認識一下它吧。 1、概念: SQLite 是一種輕量級的關系型數據庫,它不僅支持標準…

elementPlus自定義el-select下拉樣式

如何在f12元素選擇器上找到下拉div呢? 給el-select添加 :popper-append-to-body"false" 即可,這樣就可以將下拉框添加到body元素中去,否則當我們失去焦點,下拉就消失了,在元素中找不到el-select。剩下就可以…

洛谷 AT_abc169_d [ABC169D] Div Game 題解

思路 想要讓操作次數最多, z z z 就要盡可能小。 由于 z z z 是 N N N 的因數,所以 p p p 就是 N N N 的質因數。 設 N N N 的質因數中有 x x x 個 p p p,則這個 p p p 能執行 y y y 此操作,并且 y y y 滿足 ∑ i …

怎么壓縮圖片大小?6種無需犧牲質量的圖片壓縮方法

經常處理圖片的小伙伴都知道,高質量的圖片往往會占據電腦大量的存儲空間,導致圖片傳輸及存儲的不便。因此,掌握如何壓縮圖片大小變得尤為重要。本文將詳細介紹圖片壓縮的幾種方法,幫助你高效地減小圖片文件大小,讓你的…

使用多智能體辯論微調大型語言模型

F INE - TUNING L ARGE L ANGUAGE M ODELS WITH MULTI - AGENT D EBATE S UPERVISION DebateGPT: Fine-tuning Large Language M

探究Yarn依賴之源:精通why命令的秘籍

🕵??♂? 探究Yarn依賴之源:精通why命令的秘籍 在現代JavaScript項目開發中,依賴管理是至關重要的一環。Yarn作為領先的包管理器之一,提供了強大的工具來幫助開發者理解項目依賴的起源和結構。yarn why命令就是這樣一個工具&am…

IT專業入門,高考假期預習指南-致有志踏入IT領域的高考少年們

IT專業入門,高考假期預習指南 七月來臨,各省高考分數已揭榜完成。而高考的完結并不意味著學習的結束,而是新旅程的開始。對于有志于踏入IT領域的高考少年們,這個假期是開啟探索IT世界的絕佳時機。 計算機專業是一個綜合性非常強…

【.Net】Web項目部署騰訊云

文章目錄 總述前置準備docker-compose部署普通部署 參考 總述 前置準備 云服務添加端口 另有linux本身防火墻請參考: 【Linux】防火墻命令 需安裝.Net SDK和Asp .Net Runtime 注意: 1、sdk也要不只是runtime 2、是Asp .Net Runtime不是.Net Runtime …

ConcurrentHashMap并發哈希表的設計與實現

ConcurrentHashMap并發哈希表的設計與實現 大家好,我是免費搭建查券返利機器人省錢賺傭金就用微賺淘客系統3.0的小編,也是冬天不穿秋褲,天冷也要風度的程序猿! 介紹ConcurrentHashMap 1. ConcurrentHashMap的概述 ConcurrentH…

一個計算密集小程序在不同CPU下的表現

本文比較了幾款CPU對同一測試程序的比較結果,用的是Oracle公有云OCI上的計算實例,均分配的1 OCPU,內存用的默認值,不過內存對此測試程序運行結果不重要。 本文只列結果,不做任何評價。下表中,最后一列為測…

搜索型數據庫的技術發展歷程與趨勢前瞻

概述 隨著數字科技的飛速發展和信息量的爆炸性增長,搜索引擎已成為我們獲取信息的首選途徑之一,典型的代表廠商如 Google。然而,隨著用戶需求的不斷演變,傳統的搜索技術已經無法滿足人們對信息的實時性、個性化和多樣性的需求。 …

Qt應用程序中通過上下左右鍵選擇控件,像win桌面圖標選擇一樣

在Qt應用程序中模擬Windows桌面圖標的選擇行為,即通過上下左右鍵來移動選擇控件,你需要管理一個焦點系統,該系統能夠跟蹤哪個控件當前被選中,并根據用戶的鍵盤輸入來更新這個狀態。以下是一個簡化的步驟說明和示例代碼&#xff0c…

華為OD機試(D卷+C卷+A卷+B卷)2024真題目錄(全、新、準)

目錄 專欄導讀華為OD機試算法題太多了,知識點繁雜,如何刷題更有效率呢? 一、邏輯分析二、數據結構1、線性表① 數組② 雙指針 2、map與list3、隊列4、鏈表5、棧6、滑動窗口7、二叉樹8、并查集9、矩陣 三、算法1、基礎算法① 貪心思維② 二分查…

Maven_構建和pom.xml

概述 Maven是為Java項目提供構建和依賴管理支持的工具 構建環節 清理clean 刪除上一次構建的結果 編譯compile Java源程序編譯成*.class字節碼文件 測試test 運行提前準備好的測試程序,執行src/text/java下的junit測試用例 報告site 每次測試后用標準格式記錄和…

射頻校準簡略

射頻電路功能的是否正常,在測試時就可發現,而怎么樣使測試的數據正確,對測試的儀器進行校準是必不可少的環節,校準的目的就是減少測試的誤差,使測試的儀器能夠準確的反映待測件的性能,在校準過程中&#xf…