摘要:
题目链接:http://poj.org/problem?id=1659思路: havel算法的应用:(1)对序列从大到小进行排序。(2)设最大的度数为 t ,把最大的度数置0,然后把最大度数后(不包括自己)的 t 个度数分别减1(意思就是把度数最大的点与后几个点进行连接)(3)如果序列中出现了负数,证明无法构成。如果序列全部变为0,证明能构成,跳出循环。前两点不出现,就跳回第一步!简单例子:4 4 3 3 2 2第二步后0 3 2 2 1 2排完续后3 2 2 2 1 0第二步后0 1 1 1 1 0排完续后1 1 1 1 0 0第二步后0 0 1 1 0 0排完续后1 1 0 0 0 0第二 阅读全文
摘要:
题目链接:http://poj.org/problem?id=3653思路:题目意思很简单,就是二维平面上的图,要求起点到终点的最短路。建图略坑,需要坐标映射,化二维为一维。然后就是Dijkstra求最短路了。 1 #include 2 #include 3 #include 4 #include 5 #include 6 #include 7 using namespace std; 8 #define MAXN 888 9 #define inf 1 >G;17 int n,m;18 19 int dist[MAXN];20 bool mark[MAXN];21 22 bool Di 阅读全文
摘要:
题目链接: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... 阅读全文