minstdfx 求过

· · 休闲·娱乐

题意

大致就是,你有一个\color{red}Umnik图,问完美匹配是否\color{blue}\text{唯一}

题解

这题简直\Huge\text{太简单了},请语文王子同学回答一下

语文王子:公开赛求审核

哎你tm有病是不是,我喊你回答问题你干啥呢

语文王子:我知道了,但你 出言不逊 是!!

你出去你出去

那我们再喊一个人。请可爱的\Large\text{八}\color{red}\text{云蓝}回答一下

八云蓝:对于一个左部右部均n个点的二分图,如果它每个点的度数都大于等于2,那么它完美匹配必然不可能存在且唯一。证明空白太小,写不下。

\Large\text{八}\color{red}\text{云蓝}说的很对!然后我们就可以随便做了!太简单了!画个图感受一下

上图每个点度数为1,其中 上面的p[1]、下面的q[1] 有边

然后这就是充要条件,但是为了防止有问题我们还是在代码里模一下

这还要我讲?这不就随便做做!

为了防抄袭,我在代码里定义了一个等于setwsrgdrhdrhdrh的字符串:

string ssh="setwsrgdrhdrhdrh";

#pragma GCC optimize(3)
#pragma GCC target("avx")
#pragma GCC optimize("Ofast")
#pragma GCC optimize("inline")
#pragma GCC optimize("-fgcse")
#pragma GCC optimize("-fgcse-lm")
#pragma GCC optimize("-fipa-sra")
#pragma GCC optimize("-ftree-pre")
#pragma GCC optimize("-ftree-vrp")
#pragma GCC optimize("-fpeephole2")
#pragma GCC optimize("-ffast-math")
#pragma GCC optimize("-fsched-spec")
#pragma GCC optimize("unroll-loops")
#pragma GCC optimize("-falign-jumps")
#pragma GCC optimize("-falign-loops")
#pragma GCC optimize("-falign-labels")
#pragma GCC optimize("-fdevirtualize")
#pragma GCC optimize("-fcaller-saves")
#pragma GCC optimize("-fcrossjumping")
#pragma GCC optimize("-fthread-jumps")
#pragma GCC optimize("-funroll-loops")
#pragma GCC optimize("-fwhole-program")
#pragma GCC optimize("-freorder-blocks")
#pragma GCC optimize("-fschedule-insns")
#pragma GCC optimize("inline-functions")
#pragma GCC optimize("-ftree-tail-merge")
#pragma GCC optimize("-fschedule-insns2")
#pragma GCC optimize("-fstrict-aliasing")
#pragma GCC optimize("-fstrict-overflow")
#pragma GCC optimize("-falign-functions")
#pragma GCC optimize("-fcse-skip-blocks")
#pragma GCC optimize("-fcse-follow-jumps")
#pragma GCC optimize("-fsched-interblock")
#pragma GCC optimize("-fpartial-inlining")
#pragma GCC optimize("no-stack-protector")
#pragma GCC optimize("-freorder-functions")
#pragma GCC optimize("-findirect-inlining")
#pragma GCC optimize("-fhoist-adjacent-loads")
#pragma GCC optimize("-frerun-cse-after-loop")
#pragma GCC optimize("inline-small-functions")
#pragma GCC optimize("-finline-small-functions")
#pragma GCC optimize("-ftree-switch-conversion")
#pragma GCC optimize("-foptimize-sibling-calls")
#pragma GCC optimize("-fexpensive-optimizations")
#pragma GCC optimize("-funsafe-loop-optimizations")
#pragma GCC optimize("inline-functions-called-once")
#pragma GCC optimize("-fdelete-null-pointer-checks")//缺省源
#include <bits/stdc++.h>
using namespace std;
const int maxn=2000009;
string ssh="setwsrgdrhdrhdrh";
int vis[maxn],n,m,N;
vector<int> e[maxn];
deque<int> q;
int read() {
    int a=0,b=1,c=getchar();
    while(isspace(c)) c=getchar();
    if(c=='-') b=-1,c=getchar();
    while(isdigit(c)) a=(a<<3)+(a<<1)+(c^48),c=getchar();
    return a*b;
}//快读
int deg[maxn];
bool check()//检查
{
    for(int i=1;i<=N;++i)
    {
        deg[i]=e[i].size();
        if(e[i].empty()) {
            // printf("%d is empty.\n",i);
            return false;
        }
        else if(e[i].size()==1) vis[i]=true,q.push_back(i);
    }
    int visited=0;
    while(!q.empty())//判断是否为空
    {
        int cur=q.front(),nxt=-1;
        q.pop_front();++visited;
        for(auto i:e[cur])
            if(!vis[i])
            {
                nxt=i;
            }
        if(nxt==-1) continue;
        vis[nxt]=1;++visited;
        for(auto i:e[nxt])
        {
            if(!vis[i])
            {
                if((--deg[i])<2) {
                    q.push_back(i);
                    vis[i]=1;
                }
            }
        }
    }
    // printf("%d\n",visited);
    return visited>=N;//返回
}
int main()//主函数
{
    int t=read(),u,v;//输入t
    while(t--)
    {
        n=read();m=read();N=n<<1;//输入nm
        for(int i=1;i<=N;++i) e[i].clear();
        memset(vis,0,sizeof(int)*(N+1));
        q.clear();
        while(m--)//循环
        {
            u=read();v=read();
            e[u].push_back(v+n);
            e[v+n].push_back(u);
        }
        puts(check()?"Renko":"Merry");//输出答案
    }
}

求 minstdfx 大大通过!求广大洛谷朋友点赞评论顶我上去!