【bzoj1116】[POI2008]CLO 并查集

news/2024/7/24 6:15:40 标签: 数据结构与算法

原文地址:http://www.cnblogs.com/GXZlegend/p/6826544.html


题目描述

Byteotia城市有n个 towns m条双向roads. 每条 road 连接 两个不同的 towns ,没有重复的road. 你要把其中一些road变成单向边使得:每个town都有且只有一个入度

输入

第一行输入n m.1 <= n<= 100000,1 <= m <= 200000 下面M行用于描述M条边.

输出

TAK或者NIE 常做POI的同学,应该知道这两个单词的了...

样例输入

4 5
1 2
2 3
1 3
3 4
1 4

样例输出

TAK


题目大意

给你n个点和m条双向边,问能否将其中的某些边改成有向边,使得只考虑有向边的情况下每个点的入度都为1

题解

并查集

易知每个连通块都是相同的子问题,于是可以只考虑每个连通块。

一个连通块若有k个点,则必有k条有向边,即边数必须大于等于k。

如果一个连通块边数大于等于k,则一定存在环。这样使环中的边改为有向,其余由环中指向环外即可。

所以要判断的就是一个连通块是否有环,这可以用并查集来维护。

最后所有连通块都有环即符合题意。

#include <cstdio>
#include <algorithm>
using namespace std;
int f[100010] , r[100010];
int find(int x)
{
	return x == f[x] ? x : f[x] = find(f[x]);
}
int main()
{
	int n , m , i , x , y , tx , ty , flag = 1;
	scanf("%d%d" , &n , &m);
	for(i = 1 ; i <= n ; i ++ ) f[i] = i;
	while(m -- )
	{
		scanf("%d%d" , &x , &y);
		tx = find(x) , ty = find(y);
		if(tx == ty) r[tx] = 1;
		else f[tx] = ty , r[ty] |= r[tx];
	}
	for(i = 1 ; i <= n ; i ++ ) if(!r[find(i)]) flag = 0;
	printf("%s\n" , flag ? "TAK" : "NIE");
	return 0;
}

 

转载于:https://www.cnblogs.com/GXZlegend/p/6826544.html


http://www.niftyadmin.cn/n/1257878.html

相关文章

20145217《网络对抗》web基础

20145217《网络对抗》web基础 一、问题 1.什么是表单&#xff1f;表单&#xff1a;可以收集用户的信息和反馈意见&#xff0c;是网站管理者与浏览者之间沟通的桥梁。 表单包括两个部分&#xff1a;一部分是HTML源代码用于描述表单&#xff08;例如&#xff0c;域&#xff0c;标…

redis配置认证密码以及远程访问

配置认证密码: 通过配置文件进行配置 redis配置文件 redis.conf 中&#xff0c;打开配置文件找到#requirepass foobared 去掉行前的注释&#xff0c;并修改密码为所需的密码,保存文件requirepass 此处为设置的密码 重启redis 远程访问: redis配置文件 redis.conf 中&#xff0c…

神奇的 Object.defineProperty

解析 神奇的 Object.defineProperty 时间 2016-01-21 21:14:40 SegmentFault原文 http://segmentfault.com/a/1190000004346467主题 JavaScript这个方法了不起啊。。vue.js和avalon.js 都是通过它实现双向绑定的。。而且Object.observe也被草案发起人撤回了。。所以definePro…

npm查找依赖包版本

npm查找依赖包版本列表并安装指定版本 因前端提交版本迭代需由运维安装指定版本依赖包$ npm view [packagename] versions执行安装$ npm i [packagenameversion]

python邮件

解读Python发送邮件 Python发送邮件需要smtplib和email两个模块。也正是由于我们在实际工作中可以导入这些模块&#xff0c;才使得处理工作中的任务变得更加的简单。今天&#xff0c;就来好好学习一下使用Python发送邮件吧。 SMTP是发送邮件的协议&#xff0c;Python内置对SMTP…

Kubernets安装Helm

下载程序包 https://github.com/helm/helm/releases 解压后将执行文件拷贝至/usr/bin/下 创建RBAC [rootmaster01 helm]# vim rbac-config.yaml apiVersion: v1 kind: ServiceAccount metadata: name: tiller namespace: kube-system apiVersion: rbac.authorization.k8s.io/…

DIY 作品 及 维修 不定时更新

手机电池DIY充电宝 2块&#xff0c;优质手机电池加一个升压ic &#xff0c;焊上一个 usb 母头。比买的强多了。 还能调压&#xff0c;最高调到24V 可以带白光焊台。 更换手机 SIM/SD 卡二合一 贴上高温胶带&#xff0c;吹下来。 分离好了&#xff0c;清理焊盘&#xff0c;涂助焊…

Centos7离线安装Harbor镜像仓库

注意事项 1.为系统划分独立分区&#xff1a;/var–容器、/data–镜像。 2.harbor生产环境请勿使用默认密码。 2.1 安装docker 下载镜像源&#xff1a;https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo 安装&#xff1a;yum makecache && yum instal…