zoukankan      html  css  js  c++  java
  • 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);
    }
  • 相关阅读:
    商业研究(10):比呀比-海淘电商-海外正品直邮-高品质跨境购物平台
    商业研究(10):比呀比-海淘电商-海外正品直邮-高品质跨境购物平台
    POJ 2923 Relocation
    ZJU 2425 Inversion
    HDU 1394 Minimum Inversion Number
    POJ 1787 Charlie's Change
    HDU 2191 悼念512汶川大地震
    Gym
    HDU 2069 Coin Change
    UVA 674 Coin Change
  • 原文地址:https://www.cnblogs.com/zhanglichen/p/13662055.html
Copyright © 2011-2022 走看看