zoukankan      html  css  js  c++  java
  • 7-12 愿天下有情人都是失散多年的兄妹

    思路

    这题我还以为是lca呢,写了好长时间,想来想去。

    而且题目的意思我也没弄明白,题中也没有说如果两个人的姥姥是同一个人,能不能结婚,题中只说了本人、父母、祖父母、曾祖父母、高祖父母 这一系下的不能通婚。

    不是很懂这是啥意思,后来去查了查百度百科

    祖父母,法律上,是指父亲的父母。由于男女平等,父母的父母生活中都可以称之为“祖父母”。

    不过以前母亲的父母会被称之为“外祖父母”。

    就是呀,以前是叫外祖父母,这个把我搞得很糊涂。

    我还一直在考虑lca,结果这题是图的染色问题,题中有个细节要注意一下:

    • 对于染色的颜色不能等于0,因为vis数组初始值为0,这样会错(可以把vis染成-1,这样就可以用0来染色了,而且每次还不用初始化,直接染色就可以了)
    • 对于每一个出现的人都应该标记他们的性别,这样对于没有说明父母是谁的人也可以判断是否可以结婚。否则会WA第2个点。

    时间复杂度

    每次搜索顶多搜索25+25 -1 ,即63个节点,这样时间复杂度很小

    代码

    #include <bits/stdc++.h>
    using namespace std;
    
    const int maxn=1e6+10;
    int fa[maxn],mom[maxn],vis[maxn];
    char sex[maxn];
    int flag=1;
    
    void dfs(int id,int color,int cnt) {
        if (cnt>5||id==-1||!flag) {
            return;
        }
        if (vis[id]==color) {
            flag=0;
            return ;
        }
        vis[id]=color;
        dfs(fa[id],color,cnt+1);
        dfs(mom[id],color,cnt+1);
    }
    
    int main()
    {
        int n;
        int id,f,m;
        char sx;
        scanf("%d",&n);
        memset(mom,-1,sizeof(mom));
        memset(fa,-1,sizeof(fa));
        memset(vis,-1,sizeof(vis));
        while (n--) {
            scanf("%d %c %d %d",&id,&sx,&f,&m);
            sex[f]='M';
            sex[m]='F';
            fa[id]=f;
            mom[id]=m;
            sex[id]=sx;
        }
        int k;
        int v1,v2;
        scanf("%d",&k);
        while (k--) {
            scanf("%d%d",&v1,&v2);
            flag=1;
            if (sex[v1]==sex[v2]) {
                printf("Never Mind
    ");
                continue;
            }
            dfs(v1,k,1);
            dfs(v2,k,1);
            if (flag) {
                printf("Yes
    ");
            }
            else {
                printf("No
    ");
            }
        }
        return 0;
    }
    
    
    

    数据

    /*
    2
    1 m 10001 10002
    2 f 10003 10004
    3
    10001 10002
    10003 10002
    10002 10004
    */
    
  • 相关阅读:
    ImageLoader
    Matrix(单点移动,多点缩放)
    自定义各种图形
    自定义圆形图片
    将博客搬至CSDN
    拉格朗日乘子法的证明
    周志华《机器学习》课后答案——第4章.决策树
    [转] 现实•理论•证据──谈如何做研究和写论文
    高维度下的数据科学——线性空间(下)
    线性模型——异方差、序列相关、多重共线性与内生性的处理
  • 原文地址:https://www.cnblogs.com/xyqxyq/p/12332011.html
Copyright © 2011-2022 走看看