HDU 2485 最大流 拆除关键点
(2010-08-28 18:53:06)
标签:
hdu2485最大流拆除关键点it |
分类: 网络流 |
题目描述:有向图,n个点,好多边。走每条边耗时都是1。
敌人要从1号点走到n号点。
如果你拆除一个点,那么所有和这个点相连接的边都会拆除。
问你最少拆除几个点,可以是敌人在k时间内走不到n。
解题报告:
首先找出所有k时间内能走到n的路径上的点:
Floyd得到任意点对的最小值(两次spfa也可以)
比如点i,如果1到i的最短时间 + i到n的最短时间小于等于k,那么i就是路径上的点。
找到所有这样的点后,每个点拆成两个点i1,和i2,i1和i2之间连接
如果i到j有边,连接i2到j1
如果s到i有边,连接s到i1。
如果i到n有边,连接i2到n
所有边的容量都为1。
最大流(实际意义是最小割)就是答案。
代码如下:
#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
int n, m, kk, cap[120][120];
int g2[60][60];
bool g[60][60], vst[60];
int num[60], cnt;
int pre[120], que2[120];
bool find(int n, int s, int t)
{
}
int maxflow(int n, int s, int t)
{
}
int main()
{