• 7-4 愿天下有情人都是失散多年的兄妹 (25 分)


    BFS做即可

    有一个点始终wa  

    因为数据中有人的编号为0! 真的恶心

    所以把标记数组改为-1即可

    #include<bits/stdc++.h>
    using namespace std;
    int fa[100050];
    int ma[100050];
    int vis[100050];
    
    void bfs(int a,int b)
    {
        int cnt=0;
        queue<int>q;
        q.push(a);
        q.push(b);
        while(!q.empty())
        {
            int u=q.front();
            q.pop();
            cnt+=2;
    
             if(cnt>60){printf("Yes
    ");return;}
             if(u==0){q.push(0);q.push(0);continue;}
            if(fa[u]==-1)q.push(0);
            else
            {
              if(vis[fa[u]]){printf("No
    ");return;}
              q.push(fa[u]);
              vis[fa[u]]=1;
            }
            if(ma[u]==-1)q.push(0);
            else
            {
              if(vis[ma[u]]){printf("No
    ");return;}
              q.push(ma[u]);
              vis[ma[u]]=1;
            }
        }
        printf("Yes
    ");
        return ;
    }
    
    int main()
    {
      int n;
      memset(fa,-1,sizeof fa);
      memset(ma,-1,sizeof ma);
      scanf("%d",&n);
      int a,b,c;
      char s[5];
      map<int ,int >mp;
      for(int i=0;i<n;i++)
      {
          scanf("%d%s%d%d",&a,s,&b,&c);
    
          if(s[0]=='M')mp[a]=1;
          else   mp[a]=0;
          fa[a]=b;mp[b]=1;
          ma[a]=c;mp[c]=0;
      }
    
      int k;
      scanf("%d",&k);
      while(k--)
      {
          int a,b;
          scanf("%d%d",&a,&b);
          if(mp[a]==mp[b])
          {
              printf("Never Mind
    ");continue;
          }
          else
            {memset(vis,0,sizeof vis);bfs(a,b);}
      }
        return 0;
    }
  • 相关阅读:
    文件操作实例加强
    文件操作的一般基础操作
    列表与if语句的结合
    难题记录
    字典,集合,列表混合使用需注意:
    列表的一些难度操作
    字符串知识巩固
    and与or的用法
    AngularJS中的过滤器
    NodeJS中的静态资源管理服务
  • 原文地址:https://www.cnblogs.com/bxd123/p/10391618.html
Copyright © 2020-2023  润新知