• CF963B Destruction of a Tree(高级DFS)


    题意:

    您将得到一棵树(具有n个顶点和n-1个边的图形,在其中可以仅使用其边缘从任何其他顶点到达任何顶点)。

    如果顶点具有偶数阶数,则该顶点可以被破坏。 如果销毁一个顶点,则与其相连的所有边也会被删除。

    销毁给定树中的所有顶点或确定不可能。

    题解:

    DFS的时候加一个变量f,当遇到一个节点可以删除时,删除这个节点,将f置为1往下搜索。

    大神的思路太强了,感觉这个DFS方法让我自己想根本想不到。

    /*
     *author: zlc
     *zucc_acm_lab
     *just do it
     */
    #include<bits/stdc++.h> 
    using namespace std;
    typedef long long ll;
    const double pi=acos(-1.0);
    const double eps=1e-6;
    const int mod=1e9+7;
    const int inf=1e9;
    const int maxn=2e5+100;
    inline int read () {int x=0,f=1;char ch=getchar();while (ch<'0'||ch>'9') {if (ch=='-') f=-1;ch=getchar();}while (ch>='0'&&ch<='9') {x=x*10+ch-'0';ch=getchar();}return x*f;}
    ll qpow (ll a,ll b) {ll res=1;a%=mod; assert(b>=0); for(;b;b>>=1){if(b&1)res=res*a%mod;a=a*a%mod;}return res;}
    int n;
    vector<int> g[maxn];
    int inDegree[maxn];
    int vis[maxn];
    queue<int> q;
    vector<int> ans;
    void dfs (int u,int pre,int f) {
        if (!f) {
            for (int v:g[u]) {
                if (v==pre) continue;
                if (vis[v]) continue;
                dfs(v,u,0);
            }
        }
        if (inDegree[u]%2==0) {
            inDegree[u]=0;
            ans.push_back(u);
            vis[u]=1;
            for (int v:g[u]) {
                if (!vis[v]) {
                    --inDegree[v];
                    if (v!=pre) dfs(v,u,true);
                }
            }
        }
    }
    int main () {
        n=read();
        for (int i=1;i<=n;i++) {
            int x=read();
            if (!x) continue;
            g[x].push_back(i);
            g[i].push_back(x);
            inDegree[i]++;
            inDegree[x]++;
        }
        dfs(1,1,0);
        if (ans.size()<n) return printf("NO
    "),0;
        printf("YES
    ");
        for (int v:ans) printf("%d
    ",v);
    }
  • 相关阅读:
    【解题报告】2019正睿Day2
    如何卡SPFA
    【游记】2019国庆清北刷题营
    CF427D Match & Catch
    P2178 [NOI2015] 品酒大会
    Loj#6071. 「2017 山东一轮集训 Day5」字符串
    SP8093 JZPGYZ
    P3346 [ZJOI2015]诸神眷顾的幻想乡
    CF1037H Security
    CF932F Escape Through Leaf
  • 原文地址:https://www.cnblogs.com/zhanglichen/p/13662055.html
Copyright © 2020-2023  润新知