zoukankan      html  css  js  c++  java
  • hdu 1829 分组并查集

    #include<cstdio>
    #include<iostream>
    #include<cstdio>
    #define maxn 2000005
    using namespace std;
    int pre[maxn<<1];
    int find(int r)
    {
    	if(pre[r]==r) return r;
    	else return pre[r]=find(pre[r]);
    }
    void merge(int x,int y)//很多人说开两个并查集  不严谨 应该是开两组并查集合 只要后面并入的元素不会在一个集合就好 
    {
    	 x=find(x);
    	 y=find(y);
    	if(x!=y) pre[y]=x;
    }
    int main()
    {
    	int t,n,m,flag,Case=0;
    	cin>>t;
    	while(t--)
    	{
    		cin>>n>>m;
    		flag=0;
    		for(int i=1;i<=2*n;i++) pre[i]=i;
    		while(m--)
    		{
    			int x,y;
    			cin>>x>>y;
    			if(find(x)==find(y)) flag=1;//每个集合里面的元素担任的性格必须是相同的 所以 只要在一个集合就矛盾 
    			merge(x,y+n);//  x ,y 以不用的性别分别并入两组中 
    		//	merge(x+n,y);
    		    merge(y,x+n);
    		}
    		if(flag) printf("Scenario #%d:
    Suspicious bugs found!
    
    ",++Case);
    		else printf("Scenario #%d:
    No suspicious bugs found!
    
    ",++Case);
    	}
    	return 0;
    }
  • 相关阅读:
    java获取年份的后两位
    jdbcTemplate的Dao层封装
    beta准备
    福大软工 · 第十一次作业
    Alpha 冲刺 (10/10)
    Alpha 冲刺 (9/10)
    Alpha 冲刺 (8/10)
    Alpha 冲刺 (7/10)
    Alpha 冲刺 (6/10)
    Alpha 冲刺 (5/10)
  • 原文地址:https://www.cnblogs.com/z1141000271/p/5789687.html
Copyright © 2011-2022 走看看