zoukankan      html  css  js  c++  java
  • Reversible Cards ARC111 -B 思维,图论

    Reversible Cards ARC111 -B 思维,图论

    题意

    (N)张卡片,卡片正反面有颜色,正面颜色(a_i),反面颜色(b_i) 。问如何一次只能一面朝上摆放,如何拜访能让颜色种类最多,输出最多的种类数

    [1leq N leq 200000 \ 1 leq a_i,b_ileq 400000 ]

    分析

    抽象为图论模型,一次只能选择一面摆放,相当于对于一条边,一次只能选择其中一个端点。

    有显然的结论:若是一条链,则至少有一个点无法被选到,若是一个环,则所有点都可以被选到。

    因此我们可以动态判断是否形成了环来判断有没有贡献,这里用并查集优化

    代码

    int fa[400005];
    int vis[400005];
    
    int find(int x){
    	return x != fa[x] ? fa[x] = find(fa[x]) : x; 
    }
    
    int main(){
    	int n = rd();
    	int res = 0;
    	for(int i = 1;i <= 400000;i++) fa[i] = i;
    	for(int i = 0;i < n;i++){
    		int x = rd();
    		int y = rd();
    		int xx = find(x);
    		int yy = find(y);
    		if(xx != yy && (!vis[xx] || !vis[yy])) fa[xx] = yy,vis[yy] |= vis[xx],res++;
    		else if(!vis[xx]) res++,vis[xx] = 1;
    	}
    	cout << res;
    } 
    
  • 相关阅读:
    实时获取管道信息的一个小框架
    multiprocessing还是threading?
    QThread的一些使用心得
    super超类继承特点小结
    打靶总结
    简析Colorspace
    第一个Unity3D脚本
    一个新的计划,写在年末
    lambda函数的特性
    Nuke Python module的使用
  • 原文地址:https://www.cnblogs.com/hznumqf/p/14376220.html
Copyright © 2011-2022 走看看