hdu 4411 最小費用流

2021-09-06 11:48:28 字數 1422 閱讀 7755

思路:這道題建圖比較難想,首先是建立超級源點和超級匯點,那麼由於有k個警察,於是vs與0連邊,容量為k,費用為0,因為這k個警察不一定都出去,也就是不一定是最大流,於是0和vt連邊,容量為k,費用為0。然後就是拆點建圖了:

(1):0到i連邊,容量為1,費用0到i的最短路,表示去抓城市i的小偷。

(2):從i到i+n,容量為1,費用為-1000000(很小的負權),這樣可以保證每個城市都能遍歷到。

(3):對於城市i,j,(i

1 #include2 #include3 #include4 #include5 #include6

using

namespace

std;

7#define maxn 222

8#define maxm 4444444

9#define inf 1<<30

1011

struct

edgeedge[maxm];

1415

intvs,vt,ne,n,m,k;

16int

head[maxn];

1718

void insert(int u,int v,int cap,int

cost)

1932

33int

dist[maxn],pre[maxn],cur[maxn];

34bool

mark[maxn];

35bool spfa(int vs,int

vt)3656}

57}58}

59return dist[vt]

6162

int mincostflow(int vs,int

vt)63

70 flow+=aug,cost+=dist[vt]*aug;

71for(int u=vt;u!=vs;u=pre[u])75}

76return

cost;77}

7879

intmap[maxn][maxn];

80void

floyd()

8188

89int

main()

90104

floyd();

105 insert(vs,0,k,0

);106 insert(0,vt,k,0

);107

for(int i=1;i<=n;i++)

112for(int i=1;i<=n;i++)

116}

117 printf("

%d\n

",mincostflow(vs,vt)+1000000*n);

118}

119return0;

120 }

view code

hdu 4411 最小費用流

思路 這道題建圖比較難想,首先是建立超級源點和超級匯點,那麼由於有k個警察,於是vs與0連邊,容量為k,費用為0,因為這k個警察不一定都出去,也就是不一定是最大流,於是0和vt連邊,容量為k,費用為0。然後就是拆點建圖了 1 0到i連邊,容量為1,費用0到i的最短路,表示去抓城市i的小偷。2 從i到...

最小費用流

include include define maxn 61 define maxv maxn maxn 2 1 define maxe maxv 5 define oo 2147483647 define min a,b a b b a define maxq maxe using namespa...

最小費用流

int v 頂點數 vector g max v int dist max v 最短距離 int prev max v 最短路中前驅結點對應的點 int pree max v 最短路中前驅結點對應的邊 void addedge int from,int to,int cap,int cost 求從s...