首页 > 其他分享 >928. 尽量减少恶意软件的传播 II【并查集加暴力删边判断】

928. 尽量减少恶意软件的传播 II【并查集加暴力删边判断】

时间:2024-04-17 10:55:54浏览次数:29  
标签:结点 并查 idx int graph 恶意软件 t2 getf II

题意不是很清晰:

1.比如对于 graph=[[1,1,0],[1,1,1],[0,1,1]], initial=[0,1] 来说,可以发现结点的链接情况是 0-1-2,感染源结点是0和1,若是按之前题目的要求,移除0和1都不会减少最终感染个数,但是应该返回结点0,因为其 index 小。但是应用此题的条件,就一定要返回结点1,因为移除结点1之后,就断开了结点0和结点2的连接,最终只有病毒源结点0会保持感染状态,这就是二者的区别所在。

2.返回索引 最小的节点,有点坑,具体看代码。

这道题目就是纯纯的大模拟题。好久没写大模拟了。

const int N = 2e4+100 ;
const int inf =0x3f3f3f3f;
class Solution {
public:
    int f[N];
    set<int> s[N];
    map<int,int> mp;
    map<int,int> vis;
    vector<int> g[N];
    int getf(int v){
        if(v==f[v]){
            return f[v];
        }
        f[v]=getf(f[v]);
        return f[v];
    }
    void merge(int a,int b){
        int t1=getf(a);
        int t2=getf(b);
        if(t1!=t2){
            f[t2]=t1;
        }
    }
    int minMalwareSpread(vector<vector<int>>& graph, vector<int>& initial) {
        int n=graph.size();
        mp.clear();
        for(int i=0;i<=n;i++){
            f[i]=i;
            g[i].clear();
        } 
        for(auto &num:initial) vis[num]=1;
        for(int i=0;i<n;i++) s[i].clear();
        for(int i=0;i<n;i++){
            for(int j=0;j<n;j++){
                if(j==i) continue;
                if(graph[i][j]) {
                    merge(i,j);
                    g[i].push_back(j);
                    g[j].push_back(i);   
                }

            }
        }
        int mx=0;
        for(int i=0;i<n;i++){
            s[getf(i)].insert(i);
            mx=max(mx,getf(i));
        }
        int sum=0;// 计算总的感染的个数
        int maxx=0;
        int idx=-1;
        for(int i=0;i<=mx;i++){
            if(s[i].empty()) continue;
            int flag=false;
            for(int j=0;j<initial.size();j++){
                if(s[i].find(initial[j])!=s[i].end()){
                    flag=true;
                    mp[initial[j]]=i;
                    // break;
                }
            }
            if(flag){
                sum=sum+s[i].size();
            }
        }
        // cout<<"debug 并查集 st"<<endl;
        // for(int i=0;i<=mx;i++){
        //     cout<<"并查集的i:"<<i<<endl;
        //     for(auto si:s[i]) cout<<si<<" ";
        //     cout<<endl;
        // }
        // cout<<"debug 并查集 ed"<<endl;
        // 遍历每个删除的initial
        for(int i=0;i<initial.size();i++){
            int num=initial[i];
            int place=mp[num];
            queue<int> q;
            while(q.size()) q.pop();
            // cout<<"deubug Queue start"<<endl;
            for(auto si:s[place]){
                if(vis[si]&&si!=num){
                    cout<<si<<" ";
                    q.push(si);
                } 
            }
            cout<<endl;
            // cout<<"debug Queue end"<<endl;
            map<int,int> mmp;
            mmp.clear();
            int tot=0;
            // cout<<"debug process start"<<endl;
            while(q.size()){
                auto cur=q.front();
                q.pop();
                if(mmp[cur]) continue;
                mmp[cur]=1;
                cout<<cur<<" ";
                tot++;
                for(int i=0;i<g[cur].size();i++){
                    int to=g[cur][i];
                    if(to==num||cur==num){
                        continue;
                    }else{
                        q.push(to);
                    }
                    
                }
            }
            // cout<<"\ndebug process end"<<endl;
            // cout<<i<<" "<<tot<<" "<<maxx<<" "<<num<<endl;
            int res=s[place].size()-tot;
            if(res>=maxx){

                if(res>maxx||idx==-1){
                    idx=num;
                }
                else{
                    idx=min(idx,num);
                }
                maxx=res;
            }
        }
        return idx;
    }
};

标签:结点,并查,idx,int,graph,恶意软件,t2,getf,II
From: https://www.cnblogs.com/pengge666/p/18140081

相关文章

  • P3295 [SCOI2016] 萌萌哒(倍增并查集)
    题意简述有一个长为\(n\)的数字序列\(s\),有\(q\)组限制\(l_1,r_1,l_2,r_2\)形如\(s_{l_1,\cdots,r_1}=s_{l_2\cdots,r_2}\),求满足所有限制的\(s\)的方案数,数字序列不能有前导0。\(n,q\le10^5\),保证\([l_1,r_1]\)和\([l_2,r_2]\)大小相等。分析字符之间的等量......
  • Yii2-安装smarty模板引擎及使用
    Yii2-安装smarty模板引擎及使用github地址:https://github.com/yiisoft/yii2-smarty命令安装:composerrequire--prefer-distyiisoft/yii2-smarty修改web.php配置文件return[//....'components'=>['view'=>['ren......
  • 28天【代码随想录算法训练营34期】第七章 回溯算法 (● 93.复原IP地址 ● 78.子集
    93.复原IP地址classSolution:defrestoreIpAddresses(self,s:str)->List[str]:result=[]self.backtracking(s,[],0,result)returnresultdefbacktracking(self,s,path,index,result):ifindex>=len(s......
  • 洛谷题单指南-数学基础问题-P2651 添加括号III
    原题链接:https://www.luogu.com.cn/problem/P2651题意解读:计算能否在除法a1​/a2​/a3​/.../an​式子中加括号,将一部分数变成分子,使得除法结果是整数。解题思路:在a1​/a2​/a3​/.../an​中,无论怎么加括号,a1一定是分子,a2一定是分母,那么可以判断把a3...an都作为分子,是否能除尽......
  • .NET Core 8 部署在 IIS 的简单三步
    .NET 部署 IIS 的简单步骤一:下载dotnet-hosting-x.y.z-win.exe,下载地址:.NETDownloads(Linux,macOS,andWindows)(microsoft.com) .NET 部署 IIS 的简单步骤二:选择对应的版本,点击进入详细页,如8.0的版本:版本最好和你的开发环境版本一致, 比如我的开发环境目......
  • 27天【代码随想录算法训练营34期】第七章 回溯算法part03(● 39. 组合总和 ● 40.组合
    39.组合总和怎么才能避免重复?比现在数小的数就别append到path里面了,之前肯定都试过了classSolution:defcombinationSum(self,candidates:List[int],target:int)->List[List[int]]:result=[]candidates.sort()self.backtracking(cand......
  • 洛谷题单指南-数学基础问题-P1414 又是毕业季II
    原题链接:https://www.luogu.com.cn/problem/P1414题意解读:有n个数,从其中选k个数,k=1,2,3......n,使得这k个数的gcd最大。解题思路:如何求k个数的最大公约数呢?暴力法肯定不行。可以从1到n枚举这个最大公约数i,看是否有>=k个数的因数是i具体来说,用桶数组存放所有整数,a[x]表示x的......
  • day01-03_我的Java学习笔记(Java基础语法--注释、字面量、变量、二进制、ASCII编码、
    1.Java基础语法1.1注释1.2字面量(Python中叫数据类型)1.3变量1.3.1变量的定义及使用1.3.2变量使用注意事项1.4数据的存储形式:二进制字节、字、bit、byte的关系:字word字节byte位bit,来自英文bit,音译为“比特”,表示二进制位。字长是指字的......
  • Reflective Journal II
    1.Inthefirstplace,Ithoughtofmygrandpawhenitcometothepersonwhohasagreatinfluenceonme.Therefore,Ichosemygrandpaasthemainroleinmypresentationanddividedfourpointstodescribedetails.AfterfinishingthePPT,Ibegantoge......
  • Reflective Journal II
    1.Firstly,IdecidedwhoIwantedtowriteabout,mymom,consideringtheloveandcomplexrelationshipbetweenus.Then,IfoundasuitablematerialtoputwhatIwantedtoexpressintoit,suchasthephotosofmymomandme,thetopicswetalkedabout,thebea......