日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

【Lintcode】1718. Minimize Malware Spread

發布時間:2024/3/12 编程问答 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【Lintcode】1718. Minimize Malware Spread 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

題目地址:

https://www.lintcode.com/problem/minimize-malware-spread/description

給定一個nnn個節點的無向圖,以鄰接矩陣給出。每個節點代表一個網絡中的節點。再給定一個數組AAAA[i]A[i]A[i]表示節點iii被感染了(下文稱AAA里的點是”感染源“)。當一個節點被感染了,它所在的連通塊的所有節點都會被感染。現在允許選取一個“感染源”,將其變為”未感染“。問將哪個節點變為”未感染“可以使得剩余節點的總的被感染節點數量最小。如果有多個答案,則返回編號最小的節點。

思路可以參考https://blog.csdn.net/qq_46105170/article/details/113488695,那里是用并查集做的。這里采用DFS來做。

依然是要找到感染源只有一個的連通塊,那么這樣的連通塊的最大size對應的感染源就是答案(多個解則取編號最小者)。如果不存在這樣的連通塊,則直接取感染源的編號最小者。這里可以用DFS將每個連通塊染色,然后統計每個顏色的節點數,和每個顏色的污染源數。相同顏色的點顯然就是個連通塊。然后按上面邏輯求解即可。代碼如下:

import java.util.Arrays;public class Solution {/*** @param graph: the node graph* @param initial: the infected node* @return: the node index*/public int minMalwareSpread(int[][] graph, int[] initial) {// write your code here.int n = graph.length;// colors[i]存編號為i的節點被染上的顏色int[] colors = new int[n];Arrays.fill(colors, -1);int color = 0;for (int i = 0; i < n; i++) {if (colors[i] == -1) {dfs(i, color++, colors, graph);}}// size[i]存被染了顏色i的節點有多少個int[] size = new int[color];for (int i : colors) {size[i]++;}// malCount[i]存被染了顏色i的連通塊里的感染源有多少個int[] malCount = new int[color];for (int i : initial) {malCount[colors[i]]++;}int res = -1, maxSaved = 0;for (int v : initial) {// 略過含多個污染源的連通塊if (malCount[colors[v]] != 1) {continue;}if (size[colors[v]] > maxSaved) {maxSaved =size[colors[v]];res = v;} else if (size[colors[v]] == maxSaved) {res = Math.min(res, v);}}if (res == -1) {res = n;for (int i : initial) {res = Math.min(res, i);}}return res;}private void dfs(int v, int color, int[] colors, int[][] graph) {colors[v] = color;for (int next = 0; next < graph[v].length; next++) {if (graph[v][next] == 1 && colors[next] == -1) {dfs(next, color, colors, graph);}}} }

時間復雜度O(n2)O(n^2)O(n2),空間O(n)O(n)O(n)

總結

以上是生活随笔為你收集整理的【Lintcode】1718. Minimize Malware Spread的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。