摘要:
题目链接:http://poj.org/problem?id=3498思路:首先设一个超级源点,将源点与各地相连,边容量为各点目前的企鹅数量,然后就是对每个冰块i进行拆点了(i,i+n),边容量为能够接受的受损程度,这样就把点权问题转化为边权问题了,然后就是对于那些能够相互跳跃的冰块之间连边(i+n,j),(j+n,i),边容量为inf。最后就是枚举汇点看是否等于总数。 1 #include 2 #include 3 #include 4 #include 5 #include 6 #include 7 using namespace std; 8 #define MAXN 2... 阅读全文
摘要:
题目链接:http://poj.org/problem?id=3084思路:题目的意思是不让入侵者进入保护的房间,至少需要锁几道门。网络流建模:设一个超级源点,源点与有入侵者的房间相连,边容量为inf,对于那些被入侵的房间,假设房间a有们通往b,则连边a->b,容量为inf,连边b->a,容量为1,因为控制权在a,所以只要进入房间a,就能进入房间b,而相反,对于那些进入房间b的入侵者, 只要锁上了a与b之间的那扇门,就无法进入房间a了,因此连边1。最后就是跑最大流求最小割就行了。 1 #include 2 #include 3 #include 4 #include 5 #incl 阅读全文
摘要:
题目链接:http://poj.org/problem?id=1966思路:从网上找了一下大牛对于这类问题的总结:图的连通度问题是指:在图中删去部分元素(点或边),使得图中指定的两个点s和t不连通(不存在从s到t的路径),求至少要删去几个元素。图的连通度分为点连通度和边连通度:(1)点连通度:只许删点,求至少要删掉几个点(当然,s和t不能删去,这里保证原图中至少有三个点);(2)边连通度:只许删边,求至少要删掉几条边。并且,有向图和无向图的连通度求法不同,因此还要分开考虑(对于混合图,只需将其中所有的无向边按照 无向图的办法处理、有向边按照有向图的办法处理即可)。【1】有向图的边连通度: 这个 阅读全文
摘要:
题目链接:http://poj.org/problem?id=1815思路:题目要求是剔除多少个点,可以将其转化为剔除多少条边,因此需要拆点,将点i拆成i,i+n,便容量为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 ... 阅读全文
摘要:
题目链接:http://poj.org/problem?id=3249思路:dp[i]表示到点i的最大收益,初始化为-inf,然后从入度为0点开始bfs就可以了,一开始一直TLE,然后优化了好久才4000ms险过。之后有写了个dfs记忆化搜索,果然快多了。bfs AC code: 1 #include 2 #include 3 #include 4 #include 5 #include 6 using namespace std; 7 #define MAXN 100100 8 #define MAXM 2002000 9 #define inf 1que;32 fill(dp,dp... 阅读全文
摘要:
题目链接:http://poj.org/problem?id=2914思路:算法基于这样一个定理:对于任意s, t V ∈ ,全局最小割或者等于原图的s-t 最小割,或者等于将原图进行 Contract(s,t)操作所得的图的全局最小割。算法框架:1. 设当前找到的最小割MinCut 为+∞ 。2. 在 G中求出任意 s-t 最小割 c,MinCut = min(MinCut, c) 。3. 对 G作 Contract(s, t)操作,得到 G'=(V', E'),若|V'| > 1,则G=G'并转 2,否则MinCut 为原图的全局最小割。Con 阅读全文