当前位置: 首页 > news >正文

HDU-3478 Catch(二分图染色+并查集)

题意:

给一个无向图和小偷所在的起点,小偷每秒可以向相连的点出发,警察想知道会不会存在一个时间点小偷出现在每个点都有可能。

思路:

画几个图可以发现,图不连通的时候,必定是NO。如果图连通,会发现小偷的移动就是二分图的A部和B部在交替,而如果图不是一个二分图,那么小偷就能通过奇数环(二分图的环都是偶环),让两部的点混合导致可以同时出现。即当图不是二分图且是连通图时YES,否则NO。特判n==1时YES(没啥用,数据水)。

代码:

#include <bits/stdc++.h>
using namespace std;
const int maxn = 1e5+5;
vector<int> G[maxn];
int col[maxn];
int t, n, m, s;
int f[maxn];
int getF(int x){return x==f[x]? x: f[x]=getF(f[x]);}
bool dfs(int u, int fa, int key)
{
	for(int i = 0; i < G[u].size(); ++i)
	{
		int v = G[u][i];
		if(v == fa) continue;
		if(col[v] == key) return false;
		if(col[v] == (key^1)) continue;
		col[v] = key^1;
		if(!dfs(v, u, key^1)) return false;
	}
	return true;
}
int main()
{
	scanf("%d", &t);
	for(int _ = 1; _ <= t; ++_)
	{
		scanf("%d %d %d", &n, &m, &s);
		memset(col, -1, sizeof col);
		for(int i = 0; i < n; ++i)
		G[i].clear(), f[i] = i;
		for(int i = 1; i <= m; ++i)
		{
			int u, v;
			scanf("%d %d", &u, &v);
			G[u].push_back(v);
			G[v].push_back(u);
			f[getF(u)] = getF(v);
		}
		printf("Case %d: ", _);
		bool flag = false;
		for(int i = 1; i < n; ++i)
		if(getF(f[i]) != getF(f[0])) flag = true;
		col[s] = 0;
		if(!flag) flag = dfs(s, -1, 0);
		if(!flag || n == 1) puts("YES");
		else puts("NO");
	}
	return 0;
}


继续加油~

相关文章:

  • RSA密钥的生成与配置
  • POJ 2536 Gopher II
  • HDU-1043 Eight(经典八数码问题, A*+康拓+曼哈顿距离+逆序数判断可解性、双向搜索)
  • codeforces-510E Fox And Dinner(带限制的二分图多重匹配+奇偶建图+打印路径)
  • C-Cleaning Pipes(判断两线段相交+二分图判定) 2015-2016 Northwestern European Regional Contest (NWERC 2015)
  • eclipse the user operation is waiting for building workspace to complete
  • 2-SAT 题目整理
  • 64位windows2003 未在本地计算机上注册 microsoft.jet.oledb.4.0 提供程序
  • HDU-5950 Recursive sequence(矩阵乘法)
  • “互联网+”引发IT人才招工荒-新华网安徽频道
  • Java从文件读入以及读出至文件
  • HDU-5963 朋友(树上博弈)
  • HDU 6005 Pandaland(无向图最小环)
  • Cura源码在Ubuntu15.04上编译脚本(成功)
  • SPOJ - CHICAGO 106 miles to Chicago(乘积最短路)
  • [分享]iOS开发-关于在xcode中引用文件夹右边出现问号的解决办法
  • 【140天】尚学堂高淇Java300集视频精华笔记(86-87)
  • 【编码】-360实习笔试编程题(二)-2016.03.29
  • happypack两次报错的问题
  • java中的hashCode
  • JS创建对象模式及其对象原型链探究(一):Object模式
  • Lucene解析 - 基本概念
  • miniui datagrid 的客户端分页解决方案 - CS结合
  • nodejs:开发并发布一个nodejs包
  • node学习系列之简单文件上传
  • STAR法则
  • vue 个人积累(使用工具,组件)
  • 可能是历史上最全的CC0版权可以免费商用的图片网站
  • 使用Maven插件构建SpringBoot项目,生成Docker镜像push到DockerHub上
  • 推荐一款sublime text 3 支持JSX和es201x 代码格式化的插件
  • 一个项目push到多个远程Git仓库
  • 用element的upload组件实现多图片上传和压缩
  • 在GitHub多个账号上使用不同的SSH的配置方法
  • Salesforce和SAP Netweaver里数据库表的元数据设计
  • #pragam once 和 #ifndef 预编译头
  • #我与Java虚拟机的故事#连载01:人在JVM,身不由己
  • (4)事件处理——(2)在页面加载的时候执行任务(Performing tasks on page load)...
  • (Python) SOAP Web Service (HTTP POST)
  • (Ruby)Ubuntu12.04安装Rails环境
  • (zhuan) 一些RL的文献(及笔记)
  • (草履虫都可以看懂的)PyQt子窗口向主窗口传递参数,主窗口接收子窗口信号、参数。
  • (二)PySpark3:SparkSQL编程
  • (汇总)os模块以及shutil模块对文件的操作
  • (详细版)Vary: Scaling up the Vision Vocabulary for Large Vision-Language Models
  • (转)http协议
  • (转)一些感悟
  • (轉貼) 寄發紅帖基本原則(教育部禮儀司頒布) (雜項)
  • .Net 6.0 处理跨域的方式
  • .NET DevOps 接入指南 | 1. GitLab 安装
  • .net 重复调用webservice_Java RMI 远程调用详解,优劣势说明
  • [ MSF使用实例 ] 利用永恒之蓝(MS17-010)漏洞导致windows靶机蓝屏并获取靶机权限
  • [AMQP Connection 127.0.0.1:5672] An unexpected connection driver error occured
  • [Android]创建TabBar
  • [BZOJ 3282] Tree 【LCT】
  • [delphi]保证程序只运行一个实例