• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

CF982CCut'emall!【树/DFS/思维】

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

【链接】:CF982C
【题意】:有一颗树,你需要切掉一些边,使这颗树分拆成若干个节点为偶数的联通分量,最多能切掉几条边。若不能切,输出-1。

【分析】:
1.若点数n为奇数,因为奇数不可能分为偶数,那么一定输出-1
2.若点数n为偶数,偶数=偶数+偶数。就从顶点1开始,当作父顶点开始dfs。dfs用于计算子树的顶点数,如果子树是偶数个顶点,那么ans就可以++,然后把该子树标记成搜索过的,最后的答案要-1;因为整棵树肯定是偶数顶点,ans也会+1;
【代码】:
[不用vis数组]

#include<bits/stdc++.h>
using namespace std;
typedef long long  ll;
const int maxn = 2*1e5+5;
const ll INF = 2147483647;
typedef pair<ll ,int> pli;
vector<int> G[maxn];
int ans;
int vis[maxn];
int dfs(int x,int fa)
{
    int sum=1; //我们在讨论子数结点数一般是包括根结点自身的
    for(int i=0; i<G[x].size(); i++)
    {
        int u = G[x][i];
        if(u!=fa)
        {
            sum+=dfs(u,x);
        }
    }
    if(sum%2==0) ans++;
    return sum;
}
int main()
{
    int n;
    cin>>n;
    for(int i=0;i<n-1;i++)
    {
        int u,v;
        scanf("%d%d",&u,&v);
        G[u].push_back(v);
        G[v].push_back(u);
    }
    if(n&1)
    {
        puts("-1");
        return 0;
    }
    dfs(1,0);
    cout<<ans-1<<endl;//原本自己就是偶数,所以要减1
}


[用vis数组]

#include<bits/stdc++.h>
using namespace std;
typedef long long  ll;
const int maxn = 2*1e5+5;
const ll INF = 2147483647;
typedef pair<ll ,int> pli;
vector<int> G[maxn];
int ans;
int vis[maxn];
int dfs(int x)
{
    int sum=1;
    vis[x]=1;
    for(int i=0; i<G[x].size(); i++)
    {
        int u = G[x][i];
        if(!vis[u])
        {
            sum+=dfs(u);
        }
    }
    if(sum%2==0) ans++;
    return sum;
}
int main()
{
    int n;
    cin>>n;
    for(int i=0;i<n-1;i++)
    {
        int u,v;
        scanf("%d%d",&u,&v);
        G[u].push_back(v);
        G[v].push_back(u);
    }
    if(n&1)
    {
        puts("-1");
        return 0;
    }
    dfs(1);
    cout<<ans-1<<endl;
}

鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
C#DateTimeToString发布时间:2022-07-13
下一篇:
C语言字符串操作常用库函数发布时间:2022-07-13
热门推荐
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap