C - Cut 'em all! (对树进行DFS切割)

#include<bits/stdc++.h>
using namespace std;
#define maxn 200005
int ans,n,u,v;
vector <int> mmp[maxn];
int siz[maxn];
void dfs(int u,int pre)
{
    siz[u]=1;
    for(int i=0; i<mmp[u].size(); i++)
    {
        if(mmp[u][i]!=pre)
        {
            dfs(mmp[u][i],u);
            siz[u]+=siz[mmp[u][i]];
        }
    }
    if(siz[u]%2==0)
    {
        ans++;
        siz[u]=0;
    }
}
int main()
{
    cin>>n;
    int m=n-1;
    while(m--)
    {
        cin>>u>>v;
        mmp[u].push_back(v);
        mmp[v].push_back(u);

    }
    if(n%2==1)
        cout<<-1<<endl;
    else
    {
        dfs(1,-1);
        cout<<ans-1<<endl;
    }
    return 0;
}

猜你喜欢

转载自blog.csdn.net/BePosit/article/details/81540589