• 全体集合(牛客)



    分析:
    该题仅仅只是判断能否集合,发现如果俩个点距离差为奇数,则可以,距离差为偶数,则不行
    无向图保证连通,则有可能两个点有多条路径可以走,换个说法可能会有环
    则可能会有一种情况,a->b有一条路径为奇数,有一条路径为偶数
    那么其他点无论怎么样都可以满足与a,b两点集合
    因为:假如一个点距离a为奇数,那么a就可以与他集合,如果距离a为偶数,那么他距离b点就为奇数,可以与b集合
    a和b肯定是可以集合,所以整个图都可以集合。
    如果没有奇偶环的话(两点路径奇偶唯一),直接遍历一遍整个图,如果有存在偶数的一定不成立

    #include<bits/stdc++.h>
    using namespace std;
    const int N=2e5+10;
    
    int n,m,k;
    vector<int>e[N];
    
    int col[N],op;
    
    void dfs(int u){
    	for(auto v:e[u]){
    		if(col[v]&&col[v]==col[u]) op=1;
    		if(!col[v]) col[v]=-col[u],dfs(v);
    	}
    }
    
    int main(){
    	scanf("%d%d%d",&n,&m,&k);
    	for(int i=1,u,v;i<=m;i++){
    		scanf("%d%d",&u,&v);
    		e[u].push_back(v),e[v].push_back(u);
    	}
    	col[1]=1;
    	dfs(1);
    	if(op==1) return puts("YES")&0;
    	int a1,s;
    	scanf("%d",&a1);
    	for(int i=2;i<=k;i++) {
    		scanf("%d",&s);
    		if(col[s]!=col[a1]) op=1;
    	}
    	puts(op?"NO":"YES");
    	return 0;
    }
  • 相关阅读:
    Flink架构、原理与部署测试
    EntityFramework 简单入个门
    Gdb远程调试Linux内核遇到的Bug
    掌握jQuery插件开发
    两分钟实现安全完备的登录模块
    SQL Server 手把手教你使用profile进行性能监控
    Paxos 实现日志复制同步
    作用域是什么
    Consul 服务注册与服务发现
    C语言之预处理
  • 原文地址:https://www.cnblogs.com/wzxbeliever/p/15811091.html
Copyright © 2020-2023  润新知