zoukankan      html  css  js  c++  java
  • [CF1012B] Chemical table

    给你一个 (n imes m) 的矩形,一开始有 (q) 个格子上被标记。对于任意两行两列,如果交汇的四个格子中有三个被标记,那么第 (4) 个会被自动标记。问你至少需要手动标记几个格子,使得整个矩形内的格子都被标记。

    Solution

    行和列分别对应二分图的左部右部,格子对应边,那么我们只需要手动使得二分图连通,通过自动标记的操作就可以得到完全二分图

    于是答案为连通块数量 (-1)

    #include <bits/stdc++.h>
    using namespace std;
    
    #define int long long
    const int N = 1000005;
    
    int n,m,k,t1,t2,fa[N];
    
    int find(int p) {
        return p==fa[p]?p:fa[p]=find(fa[p]);
    }
    
    void merge(int p,int q) {
        p=find(p); q=find(q);
        if(p-q) fa[p]=q;
    }
    
    signed main() {
        ios::sync_with_stdio(false);
        cin>>n>>m>>k;
        for(int i=1;i<=n+m;i++) fa[i]=i;
        for(int i=1;i<=k;i++) {
            cin>>t1>>t2;
            merge(t1,t2+n);
        }
        int ans=0;
        for(int i=1;i<=n+m;i++) if(find(i)==i) ++ans;
        cout<<ans-1;
    }
    
  • 相关阅读:
    一些数学证明
    重头再来
    二次函数传参
    神经网络
    准备写点随笔了
    如何做出响应式的页面 (转)
    自适应,响应式,viewport总结
    edm邮件制作规范
    博客园blog模板整理
    git 常用的命令
  • 原文地址:https://www.cnblogs.com/mollnn/p/12584878.html
Copyright © 2011-2022 走看看