924. Minimize Malware Spread

方法一:并查集

class Solution {
public:
    int parents[301];
    int col[301];
    int findparent(int x){
        int p = x,temp = x;
        while(p!=parents[p]){
           p = parents[p];
        }
        while(temp != p){
            int j = parents[temp];
            parents[temp] = p;
            temp = j;
        }
        return parents[x];
    }
    void unit(int x,int y){
        int px = findparent(x);
        int py = findparent(y);
        if(px<py){
            swap(x,y);
            swap(px,py);
        }
        if(px != py){
            parents[px] = py;
            col[py] +=col[px];
        }
        
    }
    int minMalwareSpread(vector<vector<int>>& graph, vector<int>& initial) {
        int len = graph.size();
        for(int i =0;i<len;i++) {
            parents[i] = i;
            col[i] = 1;
        }
        for(int i =0;i<len;i++){
            for(int j = i+1;j<len;j++){
                if(graph[i][j] == 1)
                    unit(i,j);
            }
        }
        sort(initial.begin(),initial.end());
        int maxindex = -1;
        int maxcol = -1;
        for(auto index : initial){
            if(col[findparent(index)]>maxcol)
            {
                maxcol = col[findparent(index)];
                maxindex = index;
            }
        }
        return maxindex;
    }
};

方法二:BFS

class Solution {
public:
    int minMalwareSpread(vector<vector<int>>& graph, vector<int>& initial) {
        sort(initial.begin(),initial.end());
        vector<int> nodes(graph.size(),1);
        vector<int> temp;
        queue<int> stacks;
        int maxv = INT_MIN;
        int maxi = INT_MIN;
        for(int i =0;i<initial.size();i++){
            if(nodes[initial[i]]!=-1){
                temp.clear();
                stacks.push(initial[i]);
                int index;
                while(!stacks.empty()){
                    index = stacks.front();
                    nodes[index] = -1;
                    temp.push_back(index);
                    stacks.pop();
                    for(int j = 0;j<graph[index].size();j++){
                        if(nodes[j]==1&&graph[index][j] == 1)
                        {   stacks.push(j);
                            nodes[j] = -1;
                        }
                    }
                }
                int c = temp.size();
                if(c > maxv) {
                    maxv = temp.size();
                    maxi = initial[i];
                }
            }
        }
        return maxi;
    }
};

問題:
??奇怪,如果直接temp.size()>maxv,輸出為INT_MIN,想不明白

最后編輯于
?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容