博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【BZOJ1116】[POI2008]CLO 并查集
阅读量:5103 次
发布时间:2019-06-13

本文共 1036 字,大约阅读时间需要 3 分钟。

【BZOJ1116】[POI2008]CLO

Description

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

Input

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

Output

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

Sample Input

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

Sample Output

TAK
上图给出了一种连接方式.

题解:题意——无向边不算入度!!

所以在一个连通块内,只要存在环,就一定能使这个连通块内的所有点都有一个入度,否则不能

如果一个连通块内边数≥点数,就说明一定存在环(也可以直接打个标记~)

 

#include 
#include
#include
#include
using namespace std;const int maxn=100010;int n,m;int f[maxn],sv[maxn],se[maxn];int find(int x){ return (f[x]==x)?x:(f[x]=find(f[x]));}int main(){ scanf("%d%d",&n,&m); int i,j,a,b; for(i=1;i<=n;i++) f[i]=i,sv[i]=1; for(i=1;i<=m;i++) { scanf("%d%d",&a,&b); if(find(a)!=find(b)) { se[f[b]]+=se[f[a]],sv[f[b]]+=sv[f[a]],f[f[a]]=f[b]; } se[f[b]]++; } for(i=1;i<=n;i++) { if(find(i)==i&&sv[i]>se[i]) { printf("NIE"); return 0; } } printf("TAK"); return 0;}

 

转载于:https://www.cnblogs.com/CQzhangyu/p/6825179.html

你可能感兴趣的文章
Codeforces Round #426 (Div. 2) C. The Meaningless Game
查看>>
51nod 1428 活动安排问题 (贪心+优先队列)
查看>>
leetcode - Next Permutation
查看>>
C#创建Windows服务程序
查看>>
Spring Boot 2.0系列文章(五):Spring Boot 2.0 项目源码结构预览
查看>>
中国烧鹅系列:利用烧鹅自动执行SD卡上的自定义程序(含视频)
查看>>
Solaris11修改主机名
查看>>
latex for wordpress(一)
查看>>
如何在maven工程中加载oracle驱动
查看>>
Flask 系列之 SQLAlchemy
查看>>
iframe跨域与session失效问题
查看>>
aboutMe
查看>>
【Debug】IAR在线调试时报错,Warning: Stack pointer is setup to incorrect alignmentStack,芯片使用STM32F103ZET6...
查看>>
一句话说清分布式锁,进程锁,线程锁
查看>>
Hash和Bloom Filter
查看>>
SQL Server获取月度列表
查看>>
python常用函数
查看>>
python 描点画圆
查看>>
FastDFS使用
查看>>
服务器解析请求的基本原理
查看>>