首页 > 其他分享 >T399752 The Maze of the Imperial Sister(御姐的迷宫)题解

T399752 The Maze of the Imperial Sister(御姐的迷宫)题解

时间:2023-11-18 11:44:38浏览次数:31  
标签:T399752 ch fa int 题解 Sister vis while maxn

Link

T399752 The Maze of the Imperial Sister(御姐的迷宫)

Question

判断图内是否有环

Solution

先判断连通性,所有点是不是在一个块内,然后用树的性质,点数 \(=\) 边数 \(+1\) 判断

Code

#include<bits/stdc++.h>
using namespace std;
const int maxn=1e5+5,maxe=maxn*2;
struct IO{
    static const int S=1<<21;
    char buf[S],*p1,*p2;int st[105],Top;
    ~IO(){clear();}
    inline void clear(){fwrite(buf,1,Top,stdout);Top=0;}
    inline void pc(const char c){Top==S&&(clear(),0);buf[Top++]=c;}
    inline char gc(){return p1==p2&&(p2=(p1=buf)+fread(buf,1,1<<21,stdin),p1==p2)?EOF:*p1++;}
    inline IO&operator >> (char&x){while(x=gc(),x==' '||x=='\n'||x=='r');return *this;}
    template<typename T>inline IO&operator >> (T&x){
        x=0;bool f=0;char ch=gc();
        while(ch<'0'||ch>'9'){if(ch=='-') f^=1;ch=gc();}
        while(ch>='0'&&ch<='9') x=(x<<3)+(x<<1)+ch-'0',ch=gc();
        f?x=-x:0;return *this;
    }
    inline IO&operator << (const char c){pc(c);return *this;}
    template<typename T>inline IO&operator << (T x){
        if(x<0) pc('-'),x=-x;
        do{st[++st[0]]=x%10,x/=10;}while(x);
        while(st[0]) pc('0'+st[st[0]--]);return *this;
    }
}fin,fout;

struct node{
    int x,y;
};
vector<node> Q;
int M,N;
vector<int> a;
int vis[maxn],num_m[maxn],num_n[maxn];

int fa[maxn];
int getfa(int x){
    return fa[x]==x?x:fa[x]=getfa(fa[x]);
}
int main(){
    freopen("C.in","r",stdin);
    // freopen("C.out","w",stdout);
    while(1){
        while(1){
            int x,y;fin>>x>>y;
            if(x==-1&&y==-1) return 0;
            else if(x==0&&y==0) break;
            M++;
            node now;
            now.x=x,now.y=y;
            Q.push_back(now);
            if(!vis[x]) a.push_back(x),vis[x]=1;
            if(!vis[y]) a.push_back(y),vis[y]=1;
        }
        int N=a.size();
        for(int i=0;i<N;i++) fa[a[i]]=a[i];
        for(int i=0;i<M;i++){
            int fx=getfa(Q[i].x),fy=getfa(Q[i].y);
            if(fx==fy)continue;
            fa[fx]=fy;
        }
        
        for(int i=0;i<N;i++){
            int fa=getfa(a[i]);
            num_n[fa]++;
        }
        for(int i=0;i<M;i++){
            int fa=getfa(Q[i].x);
            num_m[fa]++;
        }

        int F=getfa(a[0]);
        if(num_n[F]==N&&num_m[F]==N-1) printf("Yes\n");
        else printf("No\n");

        for(int i=0;i<N;i++) vis[a[i]]=0,fa[a[i]]=0,num_n[a[i]]=0,num_m[a[i]]=0;
        N=M=0;
        a.clear();Q.clear();
    }
    return 0;
}

标签:T399752,ch,fa,int,题解,Sister,vis,while,maxn
From: https://www.cnblogs.com/martian148/p/17840255.html

相关文章

  • P4115 Qtree4 题解
    P4115看到单点修改,求全局白色的最远距离,可以使用点分树。考虑维护这棵点分树,想想树的直径的dp求法:\(f_u=\max\{f_v+w(u,v)\}\),答案为\(\max(f_v+f_{v'})(v,v'\in\{\text{son}_u\})\),\(\{\text{son}_i\}\)表示\(i\)的孩子集合。这时候维护就十分简单了,对于每个点都......
  • 电脑网站支付报错“验签出错,建议检查签名字符串或私钥与应用公钥是否匹配”问题解决记
    在对接支付宝电脑网站支付的时候,遇到如下报错:“错误代码invalid-signature错误原因:验签出错,建议检查签名字符串或签名私钥与应用公钥是否匹配”。但展示的报错内容跟实际原因有所出入(在下文中有解答),这里记录下问题的解决排查过程。问题复现在对接电脑网站支付时,生成form表单......
  • 【C++中cin在Qt输出终端无法手动输入问题解决办法(详细)】
    现象:在Qt中使用cin进行对一个变量z进行输入,然后在用cout对z进行输出,结果没有进行手动输入,程序自动凭空出现类似512,32759等一些数值输出。 解决办法:第一步:在Qt左侧项目栏,在.pro文件中添加一行代码CONFIG+=console 第二步:在项目--运行--勾选在终端中运行(Runinterminal) 配置......
  • 苏格拉底问答、实践过程截图、遇到问题解决问题截图,代码链接
    #include<stdio.h>#include<stdlib.h>#include<unistd.h>#include<semaphore.h>#include<pthread.h>#definemsleep(x)usleep(x*1000)#definePRODUCT_SPEED3//生产速度#defineCONSUM_SPEED1......
  • UVA 11178 Morley's Theorem 题解
    计算几何LinkUVA11178Morley'sTheoremQuestionMorley定理是这样的,作三角形ABC每个内角的三等分线,相交成三角形DEF,则DEF是等边三角形给出\(A,B,C\)坐标,求\(D,E,F\)坐标Solution其实是一道计算几何板子题只需要计算\(\angleABC\)的值\(a\),然后把\(BC\)逆......
  • 【题解 CF1628D2】 Game on Sum
    GameonSum(HardVersion)题面翻译Alice和Bob正在玩一个游戏,游戏分为\(n\)个回合,Alice和Bob要轮流对一个数\(x\)进行操作,已知这个数初始值是\(0\)。具体每个回合的行动规则如下:Alice选择一个在区间\([0,k]\)之间的实数\(t\)。Bob可以选择让\(x\)变成\(......
  • A2OJ Ladder 32 简要题解
    https://earthshakira.github.io/a2oj-clientside/server/Ladder32.html只记录Difficultylevel>=8的。有很多题是口胡的。写了的会标注提交记录。还有些很久以前写过的题就懒得搬提交记录了。任何的*都表示该段的后续部分未能想出并查看了题解。159.CF372DChoosingSub......
  • 【题解 ABC180F】 Unbranched
    [ABC180F]Unbranched题面翻译求\(N\)个点,\(M\)条边且满足以下条件的图的数量:图中无自环;每个点度数最多为\(2\);连通块大小的最大值恰好为\(L\)。答案对\(10^9+7\)取模。\(2\leN\le300\),\(1\leM,L\leN\)。题目描述頂点にラベルが付き辺にはラベルが付い......
  • 题解 P7972【[KSN2021] Self Permutation】
    怎么其他两篇题解都是\(O(n\logn)\)的,来发一个\(O(n)\)做法,当考前复习了。对原序列建出小根笛卡尔树,节点编号与原序列中的下标相同。记\(T_u\)表示以\(u\)为根的子树,\(lc(u),rc(u)\)分别表示\(u\)的左儿子和右儿子。设\(f_u\)表示删除若干\(T_u\)中的点(可以不删......
  • [ARC106F] Figures 题解
    题意给定\(N\)个带有若干洞的节点,其中第\(i\)个点上有\(d_i\)个洞。先可以在两个不同的节点的洞之间连边,一个洞最多连一条边,求使得最终形成的图是一棵树的方案数,对\(998244353\)取模。洞之间相互区分,两个方案不同当且仅当存在一条边在两个方案中的连的洞不同。\(2\l......