![](https://img-blog.csdnimg.cn/20201014180756928.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
tarjan
softrice
这个作者很懒,什么都没留下…
展开
-
hdu 4635——Strongly connected
最终添加完边的图,肯定可以分成两个部X和Y,其中只有X到Y的边没有Y到X的边,那么要使得边数尽可能的多,则X部肯定是一个完全图,Y部也是,同时X部中每个点到Y部的每个点都有一条边,假设X部有x个点,Y部有y个点,有x+y=n,同时边数F=x*y+x*(x-1)+y*(y-1),整理得:F=N*N-N-x*y,当x+y为定值时,二者越接近,x*y越大,所以要使得边数最多,那么X部和Y部的点数的个数差原创 2013-08-01 17:26:00 · 756 阅读 · 0 评论 -
hdu 4612——Warm up
tarjan缩点+树的直径 https://www.byvoid.com/blog/scc-tarjan/ 讲tarjian比较好 http://blog.csdn.net/u010638776/article/details/9472605 借鉴了这里 #include #include #include #include #pragma comment(linker, "/ST原创 2013-07-26 15:08:32 · 923 阅读 · 0 评论 -
poj 1236——Network of Schools
tarjan算法 注意:如果是强连通图的化输出0 1 通过tarjan算法缩点。 第一问输出入度点=0的个数。 第二问中添加的边数是max(入度点=0的个数,出度点=0的个数)。 暂且当定理记下。 #include #include #include using namespace std; #define maxm 21000 #define maxn 220 int n; int h原创 2013-07-26 21:26:25 · 694 阅读 · 0 评论 -
poj 2942——Knights of the Round Table
tarjan求双联通+建反边+二分图判断奇偶环+交叉染色法判断该双连通分量是否为二分图 代码是写出来了,原理还需掌握 #include #include #include using namespace std; #define maxn 2100 #define maxm 3100000 int n,m; int map[maxn][maxn]; int head[maxn]原创 2013-08-07 20:11:54 · 661 阅读 · 0 评论 -
hdu 4514—— 湫湫系列故事——设计风景线
tarjan+bfs搜索 #include #include #include #include #pragma comment(linker, "/STACK:1024000000,1024000000") //扩栈 using namespace std; #define maxn 110000 #define maxm 2100000 int n,m; int head[原创 2013-09-26 18:32:51 · 689 阅读 · 0 评论 -
hdu 4421——Bit Magic
http://www.cnblogs.com/wuminye/p/3274609.html 第一道2-sat,模仿着写。 #include #include #include using namespace std; #define maxn 1100 #define maxm (maxn*maxn) int n; int head[maxn],v[maxm],next[maxm]原创 2013-10-20 21:33:18 · 738 阅读 · 0 评论 -
poj 2186——Popular Cows
tarjan缩点 题意:有n个牛,m个关系。并且如果a->b b->c 则a->c. 先用tarjan把各个强连通分量缩成一个点,(这个点里的奶牛互相仰慕)并且记录下各个强连通分量里点的个数。 找出出度为0的强连通分量,若只有1个,则输出该强连通分量里点的个数。 若找到多个出度为0的强连通分量,输出0. //148K 16MS c++ #include #include #inclu原创 2013-07-26 16:32:02 · 838 阅读 · 0 评论