3 条题解

  • 0
    @ 2024-6-4 21:02:20
    #include <bits/stdc++.h>
    using namespace std;
    int n,m;
    int f[2010];
    int find(int x){
    	return x==f[x]?x:f[x]=find(f[x]);
    }
    void merge(int x,int y){
    	int fx=find(x);
    	int fy=find(y);
    	if(fx!=fy){
    		f[fx]=fy;
    	}
    }
    int main(){
    	cin>>n>>m;
    	for(int i=1;i<=2*n;i++){
    		f[i]=i;
    	}
    	char c;
    	int x,y;
    	for(int i=1;i<=m;i++){
    		cin>>c>>x>>y;
    		if(c=='F') merge(x,y);
    		else{
    			merge(y+n,x);
    			merge(x+n,y);
    		}
    	}
    	int r=0;
    	for(int i=1;i<=n;i++){
    		if(f[i]==i) r++;
    	}
    	cout<<r;
    	return 0;
    }
    
    
    • 0
      @ 2022-4-7 15:20:20

      本题依然是并查集的应用,敌人的敌人是朋友,那么对于p和q这一对敌人来说,我们也要分别把p和q与他们的敌人进行集合的合并。因此可以采用一个vector存储好每个人的敌人是谁,朋友的话不需要过多处理直接join即可

      
      #include<bits/stdc++.h>
      using namespace std;
      int n,m,p,q,fa[1005];
      char opt;
      vector<int> e[1005];
      int find(int x)
      {
      	if(x!=fa[x])
      	{
      		fa[x]=find(fa[x]);
      	}
      	return fa[x];
      } 
      void join(int x,int y)
      {
      	x=find(x);
      	y=find(y);
      	fa[x]=y;
      	return ;
      }
      int main() 
      {
      	ios::sync_with_stdio(false);
      	cin.tie(0); 
      	cin>>n>>m;
      	for(int i=1;i<=n;i++) fa[i]=i;
      	for(int i=1;i<=m;i++)
      	{
      		cin>>opt>>p>>q;
      		if(opt=='E')
      		{
      			e[p].push_back(q);
      			e[q].push_back(p);//先存对应的敌人是谁
      			for(int j=0;j<e[p].size();j++)//有敌人就也是我的朋友我需要合并
      			{
      				join(q,e[p][j]);
      			}
      			for(int j=0;j<e[q].size();j++)
      			{
      				join(p,e[q][j]);
      			}
      		}
      		else
      		{
      			join(p,q);
      		}
      	}
      	int ans=0;
      	for(int i=1;i<=n;i++)
      	{
      		if(find(i)==i) ans++;
      	}
      	cout<<ans;
        	return 0;
      }
      
      • -3
        @ 2022-4-19 22:48:22

        严禁抄题解,发现后取消成绩

        • 1

        信息

        ID
        921
        时间
        1000ms
        内存
        128MiB
        难度
        3
        标签
        递交数
        34
        已通过
        21
        上传者