图的遍历

图的遍历

https://ac.nowcoder.com/acm/problem/52275

题解:

假设图联通,那么由于每次走两步,相当于在规定一个起点后只能走奇偶性相同的点,所以,对于每一个连通块,我们只需要01染色后,看一下有没有相同颜色连边的情况,如果有,那就说明奇偶性不同的点能够到达,也就是说,我们可以遍历整张图,如果没有,那么我们直接加一条即可,
然后如果图不连通,那么首先,我们最少要多加连通块-1条边,然后如果这些连通块中有一个出现相同颜色边的情况,那么我们的只有把图联通即可,否则,则需多加一条


代码

#include <bits/stdc++.h>
#define pb push_back
using namespace std;
typedef long long ll;

int main(){
    //freopen("a.in", "r", stdin);

    int n,m,col[100010],vis[100010],flag=1;
    vector<int> G[100010];
    scanf("%d%d",&n,&m);
    for(int i=1;i<=m;i++) {
        int u,v;scanf("%d%d",&u,&v);
        G[u].pb(v);G[v].pb(u);
    }

    function<void(int ,int)> dfs = [&] (int u,int cl) {
        col[u]=cl;vis[u]=1;
        for(int v:G[u]) {
            if(col[v]) {
                if(col[v]==cl) flag=0;
            }
            else dfs(v,3-cl);
        }
    };
    int t=0;

    for(int i=1;i<=n;i++) {
        if(!vis[i]) {
            dfs(i,1);
            t++;
        }
    }
    printf("%d\n",t-1+flag);

    return 0;
}

/*
8 8
1 2
2 3
3 4
4 2
5 6
6 7
7 8
8 6
*/
全部评论

相关推荐

07-28 16:10
门头沟学院 Java
连笔试都没有就直接挂了&nbsp;这是学历厂吗两段大厂实习一段中厂一点机会都没有吗真的很难绷
xiaolihuam...:校招挂了,然后反手给我捞了个社招
投递虾皮信息等公司10个岗位
点赞 评论 收藏
分享
Lorn的意义:你这种岗位在中国现在要么牛马天天加班,要么关系户进去好吃好喝,8年时间,真的天翻地覆了,对于资本来说你就说一头体力更好的牛马,哎,退伍没有包分配你真的亏了。
点赞 评论 收藏
分享
Vincent777...:实习经历可以考虑放上去,对于软件使用方面可以细化一些,比如调整为:熟悉基于LSDYNA的瞬态动力学仿真分析,熟悉基于WORKBENCH的结构拓扑优化
我的简历长这样
点赞 评论 收藏
分享
不愿透露姓名的神秘牛友
07-25 17:46
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务