zoukankan      html  css  js  c++  java
  • CF Gym 100187J Deck Shuffling (dfs判连通)

    题意:给你一堆牌,和一些洗牌机,可以改变牌的顺序,问你能不能通过洗牌机把数字为x的牌洗到第一个位置。

    题解:反向建边,dfs判断连通性

    #include<cstdio>
    #include<vector>
    using namespace std;
    const int maxn = 200000+4;
    int a[maxn];
    vector<int> son[maxn];
    int x;
    bool vis[maxn];
    bool dfs(int u)
    {
        if(a[u] == x) return true;
        for(int i = 0; i < son[u].size(); i++){
            int v = son[u][i];
            if(!vis[v]){
                vis[v] = 1;
                if(dfs(v)) return true;
            }
        }
        return false;
    }
    
    int main()
    {
        //freopen("in.txt","r",stdin);
        int n;
        scanf("%d",&n);
        for(int i = 0; i < n; i++){
            scanf("%d",a+i);
        }
        int k;
        scanf("%d",&k);
        for(int i = 0; i < k; i++){
            for(int j = 0; j < n; j++){
                int t;
                scanf("%d",&t);
                if(t-1!=j)
                    son[j].push_back(t-1);
            }
        }
        scanf("%d",&x);
        printf("%s",dfs(0)?"YES":"NO");
        return 0;
    }
  • 相关阅读:
    6月17日
    6月16日
    6月15日
    6月14日
    6月13日
    6月12日
    6月11日
    6月10日
    6月8日
    6月5日
  • 原文地址:https://www.cnblogs.com/jerryRey/p/4658208.html
Copyright © 2011-2022 走看看