[CCCC]L2-016 愿天下有情人都是失散多年的兄妹 (25 分) -DFS

7-42.png

7-42-2.png

分析

这道题是一道DFS,只需要在两个判断点之间做两遍dfs,因为是一个树形结构,所以不需要进行visit标记防止回溯。
但是这道题里面的visit是标志所有的祖先,只要两次遍历之后,祖先要是有重复,那么就输出yes!
最近在写代码的过程中出现很多小错误的细节,比如在全局定义了int flag ,在局部里面有定义了一遍int flag,导致局部不可用等细节!写代码的时候得注意!

ac代码

#include<iostream>
#include<vector>
#include<cstring>
#include<algorithm>
using namespace std;

const int maxn = 1e5+5;
char gender[maxn];
int visit[maxn];
vector<int> vec[maxn];

int flag=0;
void dfs(int n,int num){
    if(num>=4)
        return;
    visit[n]=1;
    for(int i=0;i<vec[n].size();i++){
        if(!visit[vec[n][i]]){
            visit[vec[n][i]]=1;
            dfs(vec[n][i],num+1);
        }
        else{
            flag=1;
        }
    }
}


int main(){
    int n;
    cin>>n;
    for(int i=0;i<n;i++){
        int a,c,d;char b;
        cin>>a>>b>>c>>d;
        gender[a]=b;
        if(c!=-1){
            vec[a].push_back(c);
            gender[c]='M';
        }
        if(d!=-1){
            vec[a].push_back(d);
            gender[d]='F';
        }
        //存图
        
    }
    int m;
    cin>>m;
    for(int i=0;i<m;i++){
        int x,y;
        cin>>x>>y;
        if(gender[x]==gender[y]){
            cout<<"Never Mind"<<endl;
            continue;
        }
        flag=0;
        memset(visit,0,sizeof(visit));
        dfs(x,0);
        dfs(y,0);
        if(flag==1){
            cout<<"No"<<endl;
        }else{
            cout<<"Yes"<<endl;
        }
    }
}
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • emmm一开始用的二位数组但100000*100000的二维数组太大了,就段错误了然后后来根据这道题目对bfs做修...
    我好菜啊_阅读 301评论 0 0
  • 贪心算法 贪心算法总是作出在当前看来最好的选择。也就是说贪心算法并不从整体最优考虑,它所作出的选择只是在某种意义上...
    fredal阅读 9,284评论 3 52
  • 生命里每一次错过,都是为了让我们更好地重遇; 生命里每一次重遇,都是为了让我们更加地珍惜。 有些人相爱很久,却终究...
    小城一人阅读 276评论 0 0
  • 1. 我对于自己喜欢的人或者事,一定会专注投入的去交流和聆听,好的事情一定会拿来分享。 2. 如果遇到不能专注的情...
    玺静阅读 292评论 0 0
  • 我来园,最想探寻对规则的态度,即不因为规则而失去内在自由,又不为了自由而失去规则意识。 【事件一】石头很沉迷的玩5...
    刘益戎yirong阅读 303评论 1 2