国产av一二三区|日本不卡动作网站|黄色天天久久影片|99草成人免费在线视频|AV三级片成人电影在线|成年人aV不卡免费播放|日韩无码成人一级片视频|人人看人人玩开心色AV|人妻系列在线观看|亚洲av无码一区二区三区在线播放

網(wǎng)易首頁(yè) > 網(wǎng)易號(hào) > 正文 申請(qǐng)入駐

2025-12-18:電網(wǎng)維護(hù)。用go語(yǔ)言,有 c 個(gè)電站,編號(hào)從 1 到 c。它們之間通過 n 條無(wú)向電纜相連,connect

0
分享至

2025-12-18:電網(wǎng)維護(hù)。用go語(yǔ)言,有 c 個(gè)電站,編號(hào)從 1 到 c。它們之間通過 n 條無(wú)向電纜相連,connections 數(shù)組中每個(gè)元素 [u, v] 表示電站 u 和 v 之間有連接。通過這些連接能夠互相到達(dá)的一組電站構(gòu)成一個(gè)“電網(wǎng)”(連通分量)。

起初所有電站都是在線(正常工作)的。隨后會(huì)有一系列操作,記錄在 queries 數(shù)組中,每條操作有兩種形式:

  • ? [1, x](請(qǐng)求維護(hù)):要求對(duì)電站 x 進(jìn)行維護(hù)檢查。若 x 當(dāng)前在線,則由 x 自行完成;若 x 已離線,則在與 x 同一連通分量?jī)?nèi)選擇編號(hào)最小且目前在線的電站來(lái)完成檢查;如果該連通分量中沒有任何在線電站,則返回 -1。

  • ? [2, x](下線):將電站 x 設(shè)為離線狀態(tài)(不可用)。

需要按 queries 中的順序處理操作,并將所有類型為 [1, x] 的查詢的返回結(jié)果匯總成一個(gè)數(shù)組輸出。注意:電纜連接關(guān)系在整個(gè)過程中不變,節(jié)點(diǎn)即便離線也仍屬于原來(lái)的連通分量,下線操作不會(huì)改變連通結(jié)構(gòu)。

1 <= c <= 100000。

0 <= n == connections.length <= min(100000, c * (c - 1) / 2)。

connections[i].length == 2。

1 <= ui, vi <= c。

ui != vi。

1 <= queries.length <= 2 * 100000。

queries[i].length == 2。

queries[i][0] 為 1 或 2。

1 <= queries[i][1] <= c。

輸入: c = 5, connections = [[1,2],[2,3],[3,4],[4,5]], queries = [[1,3],[2,1],[1,1],[2,2],[1,2]]。

輸出: [3,2,3]。

解釋:

在這里插入圖片描述

最初,所有電站 {1, 2, 3, 4, 5} 都在線,并組成一個(gè)電網(wǎng)。

查詢 [1,3]:電站 3 在線,因此維護(hù)檢查由電站 3 自行解決。

查詢 [2,1]:電站 1 離線。剩余在線電站為 {2, 3, 4, 5}。

查詢 [1,1]:電站 1 離線,因此檢查由電網(wǎng)中編號(hào)最小的在線電站解決,即電站 2。

查詢 [2,2]:電站 2 離線。剩余在線電站為 {3, 4, 5}。

查詢 [1,2]:電站 2 離線,因此檢查由電網(wǎng)中編號(hào)最小的在線電站解決,即電站 3。

題目來(lái)自力扣3607。

步驟一:構(gòu)建初始圖結(jié)構(gòu)

首先根據(jù)輸入的電纜連接關(guān)系connections構(gòu)建一個(gè)無(wú)向圖。使用鄰接表來(lái)存儲(chǔ)這個(gè)圖,其中graph[i]是一個(gè)切片,保存了所有與電站i直接相連的電站編號(hào)。同時(shí),初始化一個(gè)vertices切片,用于記錄每個(gè)電站的詳細(xì)信息,包括其所屬的電網(wǎng)(連通分量)ID以及是否處于離線狀態(tài)。初始時(shí),所有電站的powerGridId設(shè)為 -1(表示未分配),offline設(shè)為 false(表示在線)。

步驟二:識(shí)別連通分量并建立優(yōu)先隊(duì)列

接下來(lái),需要找出圖中所有的連通分量(即“電網(wǎng)”)。代碼采用深度優(yōu)先搜索(DFS)的方式進(jìn)行遍歷:

  • ? 從第一個(gè)未分配電網(wǎng)ID的電站開始,進(jìn)行DFS遍歷,訪問所有能到達(dá)的電站。

  • ? 在遍歷一個(gè)連通分量的過程中,為其中每一個(gè)電站分配相同的電網(wǎng)ID。

  • ?關(guān)鍵操作:為每個(gè)連通分量創(chuàng)建一個(gè)最小堆(優(yōu)先隊(duì)列)。在DFS遍歷時(shí),將當(dāng)前訪問的電站編號(hào)插入到該連通分量對(duì)應(yīng)的堆中。由于堆是最小堆,堆頂元素始終是該連通分量中編號(hào)最小的電站。這一步是為后續(xù)高效查找最小在線電站做準(zhǔn)備。

?? 步驟三:處理查詢操作

然后,按順序處理查詢數(shù)組queries中的每一個(gè)操作:

  1. 1.下線操作 (op == 2)

  • ? 動(dòng)作很簡(jiǎn)單:找到電站x,將其offline標(biāo)志設(shè)置為true。

  • ? 注意,電站x雖然離線了,但它仍然屬于原來(lái)的連通分量,圖的連接結(jié)構(gòu)沒有改變。代碼中并沒有在此時(shí)從堆中刪除x,這是一種延遲刪除策略。

2.請(qǐng)求維護(hù)操作 (op == 1)

  • ? 首先檢查電站x的當(dāng)前狀態(tài)。如果x在線,那么結(jié)果就是x本身。

  • ? 如果x已離線,則需要從其所屬的連通分量對(duì)應(yīng)的最小堆中找出編號(hào)最小的在線電站。

  • ?延遲刪除的清理:由于下線操作沒有直接刪除堆中的元素,堆頂可能是一個(gè)已經(jīng)離線的電站。因此,需要不斷檢查堆頂元素:

    • ? 如果堆頂電站已離線,就將其從堆中彈出 (heap.Pop)。

    • ? 重復(fù)這個(gè)過程,直到堆頂是一個(gè)在線電站,或者堆為空。

  • ? 如果堆不為空,那么當(dāng)前的堆頂元素就是該連通分量中編號(hào)最小的在線電站,將其作為結(jié)果。如果堆為空,說明這個(gè)連通分量里沒有在線電站了,返回 -1。

?? 復(fù)雜度分析
  • ?總的時(shí)間復(fù)雜度

    • ?構(gòu)建圖:O(c + n),其中 c 是電站數(shù)量,n 是電纜數(shù)量。

    • ?DFS遍歷:同樣是 O(c + n),每個(gè)節(jié)點(diǎn)和邊只訪問一次。

    • ?處理查詢:這是最復(fù)雜的部分。每個(gè)下線操作 (op==2) 是 O(1) 時(shí)間。每個(gè)維護(hù)請(qǐng)求操作 (op==1) 的時(shí)間成本則取決于需要彈出多少個(gè)已離線的堆頂元素。在最壞情況下,可能每次操作都需要 O(log c) 時(shí)間(堆操作)。然而,由于每個(gè)電站最多被彈出一次,所有查詢中彈出操作的總次數(shù)是 O(c) 次。因此,處理 q 個(gè)查詢的總時(shí)間復(fù)雜度可以近似為 O((c + q) log c)

  • ?總的額外空間復(fù)雜度

    • ? 圖結(jié)構(gòu)graph需要 O(c + n) 的空間。

    • ?vertices數(shù)組需要 O(c) 的空間。

    • ? 各個(gè)連通分量的最小堆總共存儲(chǔ)了 c 個(gè)電站編號(hào),所以也是 O(c) 的空間。

    • ? 綜合來(lái)看,總的額外空間復(fù)雜度為 O(c + n)。

Go完整代碼如下:

package main

import (
"container/heap"
"fmt"
)

func processQueries(c int, connections [][]int, queries [][]int) []int {
graph := make([][]int, c+1)
vertices := make([]Vertex, c+1)

for i := 0; i <= c; i++ {
graph[i] = make([]int, 0)
vertices[i] = Vertex{vertexId: i, powerGridId: -1}
}

for _, conn := range connections {
u, v := conn[0], conn[1]
graph[u] = append(graph[u], v)
graph[v] = append(graph[v], u)
}
powerGrids := make([]*IntHeap, 0)
for i, powerGridId := 1, 0; i <= c; i++ {
v := &vertices[i]
if v.powerGridId == -1 {
powerGrid := &IntHeap{}
heap.Init(powerGrid)
traverse(v, powerGridId, powerGrid, graph, vertices)
powerGrids = append(powerGrids, powerGrid)
powerGridId++
}
}

ans := make([]int, 0)
for _, q := range queries {
op, x := q[0], q[1]
if op == 1 {
if !vertices[x].offline {
ans = append(ans, x)
} else {
powerGrid := powerGrids[vertices[x].powerGridId]
for powerGrid.Len() > 0 && vertices[(*powerGrid)[0]].offline {
heap.Pop(powerGrid)
}
if powerGrid.Len() > 0 {
ans = append(ans, (*powerGrid)[0])
} else {
ans = append(ans, -1)
}
}
} elseif op == 2 {
vertices[x].offline = true
}
}

return ans
}

func traverse(u *Vertex, powerGridId int, powerGrid *IntHeap, graph [][]int, vertices []Vertex) {
u.powerGridId = powerGridId
heap.Push(powerGrid, u.vertexId)
for _, vid := range graph[u.vertexId] {
v := &vertices[vid]
if v.powerGridId == -1 {
traverse(v, powerGridId, powerGrid, graph, vertices)
}
}
}

type Vertex struct {
vertexId int
offline bool
powerGridId int
}

type IntHeap []int

func (h IntHeap) Len() int { returnlen(h) }
func (h IntHeap) Less(i, j int) bool { return h[i] < h[j] }
func (h IntHeap) Swap(i, j int) { h[i], h[j] = h[j], h[i] }

func (h *IntHeap) Push(x interface{}) {
*h = append(*h, x.(int))
}

func (h *IntHeap) Pop() interface{} {
old := *h
n := len(old)
x := old[n-1]
*h = old[0 : n-1]
return x
}

func main() {
c := 5
connections := [][]int{{1, 2}, {2, 3}, {3, 4}, {4, 5}}
queries := [][]int{{1, 3}, {2, 1}, {1, 1}, {2, 2}, {1, 2}}
result := processQueries(c, connections, queries)
fmt.Println(result)
}

Python完整代碼如下:

# -*-coding:utf-8-*-

import heapq
from typing import List

def processQueries(c: int, connections: List[List[int]], queries: List[List[int]]) -> List[int]:
# 構(gòu)建鄰接表
graph = [[] for _ in range(c + 1)]
# 頂點(diǎn)信息
vertices = [{'vertex_id': i, 'offline': False, 'power_grid_id': -1} for i in range(c + 1)]
for u, v in connections:
graph[u].append(v)
graph[v].append(u)
# 初始化電網(wǎng)列表
power_grids = []
power_grid_id = 0
# DFS遍歷連通分量
def dfs(u: int, pg_id: int, pg_heap: List[int]):
vertices[u]['power_grid_id'] = pg_id
heapq.heappush(pg_heap, u)
for v in graph[u]:
if vertices[v]['power_grid_id'] == -1:
dfs(v, pg_id, pg_heap)
# 遍歷所有頂點(diǎn),找到所有連通分量
for i in range(1, c + 1):
if vertices[i]['power_grid_id'] == -1:
power_grid = []
dfs(i, power_grid_id, power_grid)
power_grids.append(power_grid)
power_grid_id += 1
ans = []
for op, x in queries:
if op == 1: # 查詢操作
if not vertices[x]['offline']:
ans.append(x)
else:
pg = power_grids[vertices[x]['power_grid_id']]
# 彈出所有離線的頂點(diǎn)
while pg and vertices[pg[0]]['offline']:
heapq.heappop(pg)
if pg:
ans.append(pg[0])
else:
ans.append(-1)
elif op == 2: # 離線操作
vertices[x]['offline'] = True
return ans

# 測(cè)試用例
if __name__ == "__main__":
c = 5
connections = [[1, 2], [2, 3], [3, 4], [4, 5]]
queries = [[1, 3], [2, 1], [1, 1], [2, 2], [1, 2]]
result = processQueries(c, connections, queries)
print(result) # 輸出結(jié)果

C++完整代碼如下:

  





using namespace std;

// 頂點(diǎn)結(jié)構(gòu)體
struct Vertex {
int vertexId;
bool offline;
int powerGridId;

Vertex(int id = 0) : vertexId(id), offline(false), powerGridId(-1) {}
};

void traverse(Vertex* u, int powerGridId, priority_queue, greater>& powerGrid,
vector int >>& graph, vector & vertices) {
u->powerGridId = powerGridId;
powerGrid.push(u->vertexId);

for ( int vid : graph[u->vertexId]) {
Vertex& v = vertices[vid];
if (v.powerGridId == -1 ) {
traverse(&v, powerGridId, powerGrid, graph, vertices);
}
}
}

vector< int > processQueries( int c, vector int >>& connections, vector int >>& queries) {
// 構(gòu)建鄰接表
vector int >> graph(c + 1 );
vector vertices(c + 1 );

for ( int i = 0 ; i <= c; i++) {
vertices[i] = Vertex(i);
}

for (auto& conn : connections) {
int u = conn[ 0 ], v = conn[ 1 ];
graph[u].push_back(v);
graph[v].push_back(u);
}

// 存儲(chǔ)所有電網(wǎng)(每個(gè)電網(wǎng)是一個(gè)最小堆)
vector int , vector< int >, greater< int >>> powerGrids;
int powerGridId = 0 ;

// 遍歷所有頂點(diǎn),找到連通分量
for ( int i = 1 ; i <= c; i++) {
Vertex& v = vertices[i];
if (v.powerGridId == -1 ) {
priority_queue< int , vector< int >, greater< int >> powerGrid;
traverse(&v, powerGridId, powerGrid, graph, vertices);
powerGrids.push_back(powerGrid);
powerGridId++;
}
}

vector< int > ans;

for (auto& q : queries) {
int op = q[ 0 ], x = q[ 1 ];

if (op == 1 ) { // 查詢操作
if (!vertices[x].offline) {
ans.push_back(x);
} else {
// 獲取頂點(diǎn)所在的電網(wǎng)
auto& powerGrid = powerGrids[vertices[x].powerGridId];

// 彈出所有離線的頂點(diǎn)
while (!powerGrid.empty() && vertices[powerGrid.top()].offline) {
powerGrid.pop();
}

if (!powerGrid.empty()) {
ans.push_back(powerGrid.top());
} else {
ans.push_back( -1 );
}
}
} else if (op == 2 ) { // 離線操作
vertices[x].offline = true ;
}
}

return ans;
}

int main() {
int c = 5 ;
vector int >> connections = {{ 1 , 2 }, { 2 , 3 }, { 3 , 4 }, { 4 , 5 }};
vector int >> queries = {{ 1 , 3 }, { 2 , 1 }, { 1 , 1 }, { 2 , 2 }, { 1 , 2 }};

vector< int > result = processQueries(c, connections, queries);

cout << "[" ;
for (size_t i = 0 ; i < result.size(); i++) {
cout << result[i];
if (i < result.size() - 1 ) {
cout << ", " ;
}
}
cout << "]" << endl;

return 0 ;
}

我們相信人工智能為普通人提供了一種“增強(qiáng)工具”,并致力于分享全方位的AI知識(shí)。在這里,您可以找到最新的AI科普文章、工具評(píng)測(cè)、提升效率的秘籍以及行業(yè)洞察。 歡迎關(guān)注“福大大架構(gòu)師每日一題”,發(fā)消息可獲得面試資料,讓AI助力您的未來(lái)發(fā)展。

特別聲明:以上內(nèi)容(如有圖片或視頻亦包括在內(nèi))為自媒體平臺(tái)“網(wǎng)易號(hào)”用戶上傳并發(fā)布,本平臺(tái)僅提供信息存儲(chǔ)服務(wù)。

Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.

相關(guān)推薦
熱點(diǎn)推薦
馬斯克修改算法,意外揭開日本真面目,引發(fā)全球網(wǎng)友“抗日”

馬斯克修改算法,意外揭開日本真面目,引發(fā)全球網(wǎng)友“抗日”

青煙小先生
2026-04-08 11:46:25
24歲小伙愛上51歲大媽,大媽性欲高還虐待他,結(jié)果被小伙砍成5段

24歲小伙愛上51歲大媽,大媽性欲高還虐待他,結(jié)果被小伙砍成5段

胖胖侃咖
2024-04-22 08:00:09
2cm小生的勁爆錄音!京圈太子被小花約膩了!

2cm小生的勁爆錄音!京圈太子被小花約膩了!

八卦瘋叔
2026-04-07 11:30:11
兄弟倆名震甲A,退役后靠餐飲發(fā)家,如今財(cái)富自由,哥哥身居要職

兄弟倆名震甲A,退役后靠餐飲發(fā)家,如今財(cái)富自由,哥哥身居要職

削桐作琴
2026-04-08 16:30:30
華為取消:?jiǎn)T工主動(dòng)離職 N + 1 補(bǔ)償

華為取消:?jiǎn)T工主動(dòng)離職 N + 1 補(bǔ)償

云頭條
2026-04-08 21:33:42
美國(guó)警告賴清德當(dāng)局:大陸決定動(dòng)手那一刻,“臺(tái)獨(dú)”只剩一個(gè)結(jié)局

美國(guó)警告賴清德當(dāng)局:大陸決定動(dòng)手那一刻,“臺(tái)獨(dú)”只剩一個(gè)結(jié)局

朝子亥
2026-04-05 13:25:03
沒有哪個(gè)男人,能抗拒女人的主動(dòng)

沒有哪個(gè)男人,能抗拒女人的主動(dòng)

加油丁小文
2026-03-28 10:30:05
基民血虧超30%,自己投資卻賺5000萬(wàn)!泰康基金桂躍強(qiáng),悄悄在愚人節(jié)離職

基民血虧超30%,自己投資卻賺5000萬(wàn)!泰康基金桂躍強(qiáng),悄悄在愚人節(jié)離職

南財(cái)社V
2026-04-08 20:47:49
曝陳麗華去世不到3小時(shí),“大人物”出面,幾百億遺產(chǎn)早就有規(guī)劃

曝陳麗華去世不到3小時(shí),“大人物”出面,幾百億遺產(chǎn)早就有規(guī)劃

青梅侃史啊
2026-04-08 11:53:27
退休新規(guī):1980年后生的人面臨雙重壓力。

退休新規(guī):1980年后生的人面臨雙重壓力。

歲月有情1314
2026-04-08 08:02:19
黎巴嫩宣布全國(guó)哀悼

黎巴嫩宣布全國(guó)哀悼

南方都市報(bào)
2026-04-09 09:24:03
舞池里的偏愛:為何舞女們都愛找退休大爺跳舞

舞池里的偏愛:為何舞女們都愛找退休大爺跳舞

成都人的故事
2026-04-09 06:59:32
畢業(yè)生破1270萬(wàn)!2026下半年開始,大部分家庭將直面“4大難題”

畢業(yè)生破1270萬(wàn)!2026下半年開始,大部分家庭將直面“4大難題”

復(fù)轉(zhuǎn)這些年
2026-04-05 18:00:42
不在群里為全紅嬋說話?陳芋汐遭無(wú)妄之災(zāi)!她被網(wǎng)暴時(shí) 全妹也無(wú)力阻止

不在群里為全紅嬋說話?陳芋汐遭無(wú)妄之災(zāi)!她被網(wǎng)暴時(shí) 全妹也無(wú)力阻止

東方不敗然多多
2026-04-09 07:30:10
日本老人存款8000萬(wàn),大吃大喝高消費(fèi)只為"死前財(cái)產(chǎn)清零",和孩子因此關(guān)系疏遠(yuǎn),但他并不后悔…

日本老人存款8000萬(wàn),大吃大喝高消費(fèi)只為"死前財(cái)產(chǎn)清零",和孩子因此關(guān)系疏遠(yuǎn),但他并不后悔…

英國(guó)那些事兒
2026-03-21 23:16:20
美高層曾提議:中國(guó)可以用1萬(wàn)多億美債,從美國(guó)手中"贖回"臺(tái)灣

美高層曾提議:中國(guó)可以用1萬(wàn)多億美債,從美國(guó)手中"贖回"臺(tái)灣

別讓往昔的悲傷和對(duì)未來(lái)的恐懼
2026-04-09 00:05:19
全紅嬋報(bào)警!282人集體群聊霸凌,陳芋汐卷入漩渦沉默令人寒心

全紅嬋報(bào)警!282人集體群聊霸凌,陳芋汐卷入漩渦沉默令人寒心

林大師熱點(diǎn)
2026-04-08 16:38:38
這樣的“規(guī)則”太“霸王” !無(wú)法說話,四肢癱瘓,16歲女孩誤購(gòu)演唱會(huì)門票求退票,平臺(tái)規(guī)則“概不退票”

這樣的“規(guī)則”太“霸王” !無(wú)法說話,四肢癱瘓,16歲女孩誤購(gòu)演唱會(huì)門票求退票,平臺(tái)規(guī)則“概不退票”

新民晚報(bào)
2026-04-08 12:58:55
10年內(nèi)入獄2次,爆火后“包一晚”40萬(wàn),如今的她過得怎么樣?

10年內(nèi)入獄2次,爆火后“包一晚”40萬(wàn),如今的她過得怎么樣?

寶哥精彩賽事
2026-04-07 15:43:13
7戰(zhàn)6場(chǎng)被雪藏!火箭7連勝,1人成雞肋?休賽期搭上首輪也要交易他

7戰(zhàn)6場(chǎng)被雪藏!火箭7連勝,1人成雞肋?休賽期搭上首輪也要交易他

熊哥愛籃球
2026-04-09 10:23:37
2026-04-09 10:56:49
moonfdd incentive-icons
moonfdd
福大大架構(gòu)師每日一題
1172文章數(shù) 63關(guān)注度
往期回顧 全部

科技要聞

Meta凌晨首發(fā)閉源大模型 扎克伯格又行了?

頭條要聞

福建45歲女子駕車墜河5人遇難有3名兒童 家屬最新發(fā)聲

頭條要聞

福建45歲女子駕車墜河5人遇難有3名兒童 家屬最新發(fā)聲

體育要聞

40歲,但實(shí)力倒退12年

娛樂要聞

具俊曄最新露面,又黑又瘦情緒低迷

財(cái)經(jīng)要聞

談判基礎(chǔ)已被破壞!霍爾木茲海峽關(guān)閉

汽車要聞

8155芯片+L2智駕 瑞虎5運(yùn)動(dòng)版上市 置換補(bǔ)貼價(jià)6.79萬(wàn)元起

態(tài)度原創(chuàng)

房產(chǎn)
本地
游戲
數(shù)碼
手機(jī)

房產(chǎn)要聞

超級(jí)卷王登場(chǎng)!??谑讉€(gè)抬板四代宅,徹底刷新認(rèn)知!

本地新聞

跟著歌聲游安徽,聽古村回響

IGN5分銳評(píng)《七大罪:起源》:?jiǎn)握{(diào)乏味 平庸之作!

數(shù)碼要聞

三星顯示:顯示器用QD-OLED面板累計(jì)出貨500萬(wàn)塊

手機(jī)要聞

蘋果要花3年重新定義iPhone!探索無(wú)開孔終極形態(tài)

無(wú)障礙瀏覽 進(jìn)入關(guān)懷版