0
点赞
收藏
分享

微信扫一扫

4-1.7 文件传输(并查集)

Raow1 2022-03-14 阅读 26
图论c++
  • 题目链接:4-1.7 文件传输
  • 考查知识:并查集
  • 题意描述:纯纯的并查集
  • 具体代码
    #include<bits/stdc++.h>
    using namespace std;
    typedef long long ll;
    const int N=1e4+10; 
    int fa[N];
    void init(int n){
    	for(int i=1;i<=n;i++)//[1,N] 
    		fa[i]=i;
    } 
    int find(int x){
    	if(x==fa[x])return x;
    	else return fa[x]=find(fa[x]);
    }
    void merge(int a,int b){
    	int faA=find(a),faB=find(b);
    	if(faA!=faB)fa[faA]=faB;
    }
    int main(){
    	int n,a,b;
    	char c;
    	cin>>n;
    	init(n);
    	while(1){//不知道多少行,读到S为止 
    		cin>>c;
    		if(c=='S')break;//输入终止
    		cin>>a>>b;
    		if(c=='I')merge(a,b);//在计算机c1和c2之间加入连线,使它们连通
    		else{//查询计算机c1和c2之间能否传输文件
    			if(find(a)==find(b))cout<<"yes"<<endl;
    			else cout<<"no"<<endl; 
    		}
    	}
    	int cn=0;//并查集判断联通分量 
    	for(int i=1;i<=n;i++){
    		if(fa[i]==i)cn++;
    	}
    	if(cn==1)cout<<"The network is connected.";
    	else cout<<"There are "<<cn<<" components.";
    	return 0;
    }
    
    
举报

相关推荐

【文件传输】

文件传输

文件传输协议:::

linux文件传输

Linux文件传输

[并查集][C++]并查集模板

并查集__

0 条评论