BZOJ1116:[POI2008]CLO】的更多相关文章

浅谈并查集:https://www.cnblogs.com/AKMer/p/10360090.html 题目传送门:https://lydsy.com/JudgeOnline/problem.php?id=1116 树是\(NIE\),基环树是\(TAK\),任意有环的图都可以通过删边变成基环树. 所以用并查集判判每个联通块是否有环即可. 时间复杂度:\(O(\alpha{n})\) 空间复杂度:\(O(n)\) 代码如下: #include <cstdio> using namespace…
[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…
1116: [POI2008]CLO Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 565  Solved: 303[Submit][Status] Description Byteotia城市有n个 towns m条双向roads. 每条 road 连接 两个不同的 towns ,没有重复的road. 你要把其中一些road变成单向边使得:每个town都有且只有一个入度 Input 第一行输入n m.1 <= n<= 100000,1 <…
1116: [POI2008]CLO Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 922  Solved: 514[Submit][Status][Discuss] Description Byteotia城市有n个 towns m条双向roads. 每条 road 连接 两个不同的 towns ,没有重复的road. 你要把其中一些road变成单向边使得:每个town都有且只有一个入度 Input 第一行输入n m.1 <= n<= 100…
1116: [POI2008]CLO https://lydsy.com/JudgeOnline/problem.php?id=1116 分析: 单独考虑每个联通块的情况. 设这个联通块里有n个点,那么至少有n-1条边了. 如果每个点入度都为1,那么就要求至少有n条边(其实就是基环树),大于n条边可以不选. 所以有:如果一个联通块是可行的,必须满足存在大于等于点数条边. 所以并查集维护加边的过程. 1.出现了环,那么这个联通块就合法了. 2.合并两个联通块,只要一个联通块里合法就行.(一个合法了…
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…
题目:https://www.lydsy.com/JudgeOnline/problem.php?id=1116 分析性质,只要有环,那么给环定一下向就满足了条件: 环上点的其他边可以指向外面,所以两个连通块合并时只要一个有环,那么整个连通块就都可以了. 代码如下: #include<iostream> #include<cstdio> #include<cstring> using namespace std; ,maxm=2e5+; int n,m,fa[maxn]…
只需对每个联通块的$dfs$树检查有没有返租边即可 复杂度$O(n + m)$ #include <cstdio> #include <cstring> using namespace std; extern inline char gc() { ], *S = RR + , *T = RR + ; , , stdin), S = RR; return *S ++; } inline int read() { , w = ; char c = gc(); ; c = gc(); }…
P3469 [POI2008]BLO-Blockade 题意翻译 在Byteotia有n个城镇. 一些城镇之间由无向边连接. 在城镇外没有十字路口,尽管可能有桥,隧道或者高架公路(反正不考虑这些).每两个城镇之间至多只有一条直接连接的道路.人们可以从任意一个城镇直接或间接到达另一个城镇. 每个城镇都有一个公民,他们被孤独所困扰.事实证明,每个公民都想拜访其他所有公民一次(在主人所在的城镇).所以,一共会有n*(n-1)次拜访. 不幸的是,一个程序员总罢工正在进行中,那些程序员迫切要求购买某个软件…
Byteotia城市有n个 towns m条双向roads. 每条 road 连接 两个不同的 towns ,没有重复的road. 你要把其中一些road变成单向边使得:每个town都有且只有一个入度 和上题一样... #include <iostream> #include <cstdio> #include <cstring> #include <algorithm> #include <cmath> using namespace std;…