摘要: 原题链接 题解:考虑容斥,即假设是有向的完全图,那么边的数量必然是 \(n\times(n-1)\),考虑并不是强连通图,那么最接近的情况即是两个强连通分量,考虑如何形成,那么就是在原图缩完点的基础上,保留一个入度或者出度为零的~~(我就是没想到还有可能是出度为零)~~强连通分量不与除了自己以外的任 阅读全文
posted @ 2021-04-08 20:21 u_yan 阅读(26) 评论(0) 推荐(0) 编辑
摘要: Tarjan 有向图 强连通分量 void tarjan(int u) { dfn[u] = low[u] = ++times; stk[++top] = u;instk[u] = 1; for (int i = h[u]; i != -1; i = ne[i]) { int v = to[i]; 阅读全文
posted @ 2021-04-08 16:36 u_yan 阅读(57) 评论(0) 推荐(0) 编辑
摘要: 原题hdu链接 原题poj链接 题解:做得比较通透的题,首先知道一条性质,边双连通分量缩点后会变成一棵树。要想知道加边后还有几个桥,那就相当于在一棵树上加边,找到这两个点的最近公共祖先,然后就可以找到经过了多少条边,这些全是桥,并且当经过后,这些桥都不再起作用了。 代码: #include <ios 阅读全文
posted @ 2021-04-08 16:01 u_yan 阅读(38) 评论(0) 推荐(0) 编辑
摘要: 原题链接 题解:算是比较心累的一道题了,发现复杂的图论题尤其是涉及联通分量,就是大模拟+分类讨论。题中意思是,问两个点,是否能有两条不同路径。不同是指没有经过同一个点除了起点和终点。所以如果在同一个连通分量中,并且连通分量的大小大于2,那么必然是两条及以上。如果两个点不在一个集合,即没有道路。如果两 阅读全文
posted @ 2021-04-08 14:24 u_yan 阅读(43) 评论(0) 推荐(0) 编辑
摘要: 原题链接 代码: #include <iostream> #include <vector> #include <cstring> #include <cstdio> #include <queue> #include <map> using namespace std; const int N = 阅读全文
posted @ 2021-04-08 11:18 u_yan 阅读(41) 评论(0) 推荐(0) 编辑