zoukankan      html  css  js  c++  java
  • hdu 2492 A Bug's Life

    题意:n只虫子,有两种性别,给出m次交配情况(正常是异性),问是否会出现同性交配的情况

    分析:两种方法解决 ,第一眼看到这道题,就是二分图染色,bfs一下,有没有解救Ok了,确实个并查集题,尴尬

    2-SAT解法,把一个点拆成两个点,是和非 ,a b为异的话,那么a和b非 ,a非和b,x表示是,x+n表示否成立,只要每个集合不冲突,也就是a和b不出现在一个集合里面,那么就有解,每次判断是否冲突,冲突就无解,否则就把(a,b+n),(a+n,b)合并

    #include<bits/stdc++.h>
    using namespace std;
    const int maxn=1e5+5;
    int f[maxn],v[maxn];
    
    void init(int n){
        for(int i=0;i<=n;i++)
          f[i]=i,v[i]=0;
    }
    
    int find(int x){
        return x==f[x]?x:f[x]=find(f[x]);
    }
    
    void bing(int x,int y){
        int t1=find(x);
        int t2=find(y);
        if(t1!=t2)
          f[t2]=t1;
    }
    
    int main(){
        int t,cas=1,n,m,x,y;
        scanf("%d",&t);
        while(t--){
            scanf("%d%d",&n,&m);
            init(n*2);
            bool ans=1;
            while(m--){
                scanf("%d%d",&x,&y);
                if(!ans)continue;
                int t1=find(x);
                int t2=find(y);
                if(t1==t2)ans=0;
                bing(x,y+n);
                bing(x+n,y);
                
            }
            printf("Scenario #%d:
    ",cas++);
            if(ans)
              puts("No suspicious bugs found!");
            else
              puts("Suspicious bugs found!");
            puts("");
        }
        return 0;
    }
    View Code

    第二个就是带权并查集,博客多的是,查一下就好

  • 相关阅读:
    Day12 文件操作
    Day11 集合、集合操作
    Day10 【小程序】商城管理(购物车小程序的增强版)
    Day8 字符串操作
    Day9 字典操作
    文件操作
    【python练习】购物车程序
    2296 寻找道路
    2661 信息传递(tarjan&拓扑)
    【模板】LCA(tarjan)
  • 原文地址:https://www.cnblogs.com/jihe/p/5710334.html
Copyright © 2011-2022 走看看