首页 > 其他分享 >CF547D Mike and Fish

CF547D Mike and Fish

时间:2024-05-19 20:53:18浏览次数:20  
标签:Mike int Fish CF547D 连通 maxn

CF547D Mike and Fish

这也能图论的一道题。

思路

对于 \(x\) 坐标相同的点,我们两两配对连边,多余的点不管。

对于 \(y\) 坐标相同的点,我们两两配对连边,多余的点不管。

这样就得到了若干个连通图,对这些连通图跑二分图染色即可得到答案。

证明:

由于是二分图染色,且横竖两两配对,由于连了边的点都不可能是相同的颜色,所以横竖都可以保证最少有 \(\lfloor \frac{n}{2} \rfloor\) 个点染成了一个颜色。

如果二分图染色不成功怎么办?

由于每个点最多两条边,所以说想要染色不成功只有可能是形成了奇数环。

这两条边一条横着一条竖着,我们不妨先加入环上所有的横边,设有 \(x\) 条。

这时形成了 \(x\) 个连通块,这些连通块想要形成环就必须添加 \(x\) 条竖边。

那么总边数就是 \(2x\) 条。

由于环上点数等于环边数,所以有 \(2x\) 个点,故得证不会有奇数环。

CODE

#include<bits/stdc++.h>
using namespace std;

const int maxn=2e5+5;

vector<int>E[maxn];

int col[maxn];

int lsth[maxn],lstw[maxn];

int n;

inline void dfs(int u,int tw)
{
    col[u]=tw;
    for(auto v:E[u]) if(col[v]==-1) dfs(v,tw^1);
}

int main()
{
    scanf("%d",&n);
    for(int i=1;i<=n;i++)
    {
        int x,y;col[i]=-1;
        scanf("%d%d",&x,&y);
        if(lsth[x]){E[i].push_back(lsth[x]);E[lsth[x]].push_back(i);lsth[x]=0;}else lsth[x]=i;
        if(lstw[y]){E[i].push_back(lstw[y]);E[lstw[y]].push_back(i);lstw[y]=0;}else lstw[y]=i;
    }
    for(int i=1;i<=n;i++) if(col[i]==-1) dfs(i,0);
    for(int i=1;i<=n;i++) if(col[i]) putchar('r');else putchar('b');
}

题解 from:shadowice1984 题解 CF547D 【Mike and Fish】

标签:Mike,int,Fish,CF547D,连通,maxn
From: https://www.cnblogs.com/binbinbjl/p/18200733

相关文章

  • A. Jellyfish and Game
    原题链接题解1.经过样例证明,双方的交换策略一定是自己最小值去换对面最大值2.双方交换的最大值一定局限在双方各自初始最大值之间,最小值也是code#include<bits/stdc++.h>#definelllonglongusingnamespacestd;intmain(){llt;cin>>t;while(t--)......
  • [shell] fishshell -- 教程
    [shell] fishshell -- 教程   一、fishshell 官网  1.https://fishshell.com/     二、fishshell  文档 1.https://fishshell.com/docs/current/index.html     三、fishshell 教程1.h......
  • Jellyfish and EVA
    这道题目实在没有什么好的办法去描述状态空间,只能感性理解一下,等对概率的理解更深了再来吧。。。发现这是一道概率DP,而且满足拓扑序,我们直接倒序转移就好了设\(f_i\)表示从第\(i\)个点到第\(n\)个点的概率,我们发现当只有一条出边是非常好转移的,但是其他就不太行了我们遇到这种......
  • Fisher 信息量和充分统计量的理解
    一:fisher信息量和有效估计量已知总体为包含未知参数的随机变量,密度函数为\(f(x,\theta)\).Fisher信息量为样本携带参数\(\theta\)的信息.对信息量做以下三条假设:1:信息量随样本数量增加等量递增:\(ln\prodf(x_i,\theta)=\sumlnf(x_i,\theta)\).2:密度函数\(f(x,\th......
  • 数据分享|R语言使用核Fisher判别方法、支持向量机、决策树与随机森林研究客户流失情况
    全文链接:https://tecdat.cn/?p=35438原文出处:拓端数据部落公众号分析师:JiaojiaoZhao现在,越来越多的人意识到预测客户的流失与否是一件非常重要的事情。而且比较值得注意的是,留住原有的客户是要比吸引新客户更加容易的,而且成本更低。客户的流失可以从三个不同的方面来考虑。首......
  • CodeForces 1874E Jellyfish and Hack
    洛谷传送门CF传送门显然\(\text{fun}(P)_{\max}=\frac{|P|(|P|+1)}{2}\)。考虑大力dp,设\(f_{i,j,k}\)为\(|P|=i\),\(P_1=j\),\(\text{fun}(P)=k\)的排列\(P\)的个数。此时\(|L|=j-1,|R|=i-j\)。转移枚举\(L_1,R_1,\text{fun}(L),\text{fun}(R......
  • Fishlulu黑马头条微服务项目日志
    写在前面......
  • What is Rust's turbofish
    Haveyoueverheardaboutthe“turbofish”?ItisthatpieceofRustsyntaxthatlookslike ::<SomeType>.InthispostIwilldescribewhatitdoesandhowtouseit.Firstof,ifyouweretowritesomethinglikethis:fnmain(){letnumbers:Ve......
  • Codeforces 1876F - Indefinite Clownfish
    首先注意到这样一个性质:既然两个序列的平均值相同,并且又形成公差\(\pm1\)的等差数列,就必然会存在一个元素\(x\)满足\(x\)在两个序列中都出现过(否则两个序列的值域区间不交,值域区间靠后的那个显然平均值比靠前的那个大)。那么我们枚举\(x\)在两个序列中出现的位置\(p\)和......
  • Go循环打印cat-dog-fish。。。。。
    packagemainimport( "fmt" "sync")//三个协程交替打印catdogfishvarrepeatCount=10funcmain(){ //wg用来防止主协程提前先退出 wg:=&sync.WaitGroup{} wg.Add(3) chCat:=make(chanstruct{},1) chDog:=make(chanstruct{},1) chFis......