摘要:
题目链接:http://poj.org/problem?id=3310思路:首先是判断图的连通性,以及是否有环存在,这里我们可以用并查集判断,然后就是找2次dfs找树上最长直径了,并且对树上最长直径上的点进行标记,于是根据题意我们可以发现,如果这个图是“caterpillar”的话,那么他所有的边要么两端都在树上最长直径上,要么就是其中一端在,于是我们可以再次dfs进行判断就可以了。 1 #include 2 #include 3 #include 4 #include 5 using namespace std; 6 #define MAXN 111 7 8 struct ... 阅读全文
摘要:
题目链接:http://poj.org/problem?id=3308思路:裸的最小点权覆盖,建立超级源点和超级汇点,将源点与行相连,容量为这行消灭敌人的代价,将列与汇点相连,容量为这列消灭敌人的代价,对于每一个敌人(x,y),连边x->y,容量为inf,这样就说明选取的点覆盖了那些边(敌人),然后跑最大流求最小割即可。PS:这里是乘积最小,要取对数转化为和最小。 1 #include 2 #include 3 #include 4 #include 5 #include 6 #include 7 using namespace std; 8 #define MAXN 222 ... 阅读全文
摘要:
题目链接:http://poj.org/problem?id=3281思路:设一个超级源点和一个超级汇点,源点与食物相连,饮料与汇点相连,然后就是对牛进行拆点,一边喜欢的食物相连,一边与喜欢的饮料相连,拆分的牛之间也连边,所有边的容量均为1.然后跑最大流就可以了。 1 #include 2 #include 3 #include 4 #include 5 #include 6 using namespace std; 7 #define MAXN 444 8 #define MAXM 4444444 9 #define inf 1que; 39 que.push(vt... 阅读全文