摘要: 双联通缩点+树形DP~~前些天做树形DP的时候就发现这道题了,那时候没学双联通不知道怎么样缩点,这两天又把tarjan学了一下,先学习用tarjan解决强联通,之后感觉用tarjan解决双联通与强联通有类似之处,今天早上终于把双联通缩点学会了。。^_^。。。题目大意:给一个教室群,问能不能把这些教室群分成两部分,并且使两部分之间的权值差最小(每一个教室都有一定的权值);思路:先用双联通进行缩点,因为那些双向连通的教室肯定是分不开的,所以要把它们缩成一个点。之后再重新建图,用树形DP一下求最小差值!需要注意一点这道题的数据包含重边,需要考虑!!代码:View Code 1 # include&l 阅读全文
posted @ 2011-08-02 11:33 奋斗青春 阅读(1168) 评论(0) 推荐(2)
摘要: 双连通分量。题目大意:给出一个连通图,求至少添加多少条边,使得对于任意亮点,不只一条路。即两点间的路去掉一条边还是连通的。思路:用双联通缩点,然后求出度为一的双连通分量的个数count1,最后(count1+1)/2即是所求!!这个题基本上算是我接触双连通的第一道题,写了好多个版本,最后还是稍微了理解了一些双联通。。双连通分量的tarjan用不用栈都可以,因为它不会存在横向边,不需要考虑下一个点是否在栈中。。if(low[u]==dfn[u]){count++;do{v=S.top();S.pop();vis[v]=0;Belong[v]=count;}while(v!=u);}用栈的话可以很 阅读全文
posted @ 2011-08-02 10:50 奋斗青春 阅读(325) 评论(0) 推荐(0)