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

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.合并两个联通块,只要一个联通块里合法就行.(一个合法了…
[题目链接] http://www.lydsy.com/JudgeOnline/problem.php?id=1116 [题目大意] Byteotia城市有n个towns,m条双向roads.每条road连接两个不同的towns, 没有重复的road.你要把其中一些road变成单向边使得:每个town都有且只有一个入度 [题解] 我们发现当一个连通块边数大于等于其点数的时候就满足条件, 那么此题如果出现边数少于点数的连通块就不成立, 用并查集能够完成判断. [代码] #include <cstd…
Byteotia城市有n个 towns m条双向roads. 每条 road 连接 两个不同的 towns ,没有重复的road. 你要把其中一些road变成单向边使得:每个town都有且只有一个入度 和上题一样... #include <iostream> #include <cstdio> #include <cstring> #include <algorithm> #include <cmath> using namespace std;…
成立时当且仅当每个联通块都有环存在.一个连通块若有m个点,则必有多于m条有向边,可用并查集来维护. #include<cstdio> #include<iostream> #define R register int #define pc(x) putchar(x) ; using namespace std; inline int g() { R ret=,fix=; register :fix; +(ch^); while(isdigit(ch=getchar())); ret…
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 <…
[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…
浅谈并查集: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…
题目: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(); }…