hdu 3599 最短路 最大流)

2021-06-22 05:42:45 字數 1599 閱讀 9440

思路:首先spfa求一下最短路,然後對於滿足最短路上的邊(dist[v]==dist[u]+w)加入到新圖中來,邊容量為1,最後求出的最大流就是沒有相交的邊的最短路徑條數。

1 #include2 #include3 #include

4 #include5 #include6 #include7

using

namespace

std;

8#define maxn 4444

9#define inf 1<<30

1011

struct

node;

14};

1516

intn;

17bool

mark[maxn];

18int

dist[maxn];

19 vector>g;

20void

spfa()

2140}41

}42}43

}4445struct

edgeedge[maxn*maxn];

4849

intne,nv;

50int

head[maxn];

5152

void insert(int u,int v,int

cap)

5364

65void

build()

6676}77

}78}79

80int

level[maxn],gap[maxn];

81void bfs(int

vt)8299}

100}

101102

intpre[maxn],cur[maxn];

103int sap(int vs,int

vt)104

125 aug=inf;

126}

127break

;128

}129

}130

if(flag)continue

;131

int minlevel=nv;

132for(int i=head[u];i!=-1;i=edge[i].next)

138}

139if(--gap[level[u]]==0)break

;140 level[u]=minlevel+1

;141 gap[level[u]]++;

142 u=pre[u];

143}

144return

maxflow;

145}

146147

148int

main()

149162

spfa();

163if(dist[n]==inf||n==1

)167

build();

168 printf("

%d\n

",sap(1

,n));

169}

170return0;

171 }

view code

hdu 3599 最短路 最大流)

思路 首先spfa求一下最短路,然後對於滿足最短路上的邊 dist v dist u w 加入到新圖中來,邊容量為1,最後求出的最大流就是沒有相交的邊的最短路徑條數。1 include2 include3 include 4 include5 include6 include7 using name...

hdu3416 最短路 最大流

最短路 最大流 用spfa算出 s到各個點的最短路 t到各個點的最短路 if dis1 i dis2 i map i j dis1 t 滿足這種情況說明邊在最短路上,所以根據這個方法建邊 然後最大流解決 這道題很值得體會體會 this code is made by linmeichen probl...

HDU5294 最短路,最大流

題意是給乙個n點m邊的無向圖,求最少去掉多少邊使得最短路不存在,和最短路存在的情況下最多去掉多少邊。把所有最短路上的邊搞進來,流量為1跑最大流,去掉多少邊只要搞個dp就能找到最短路圖上得最短的路,用m去減就行。因為n 2000,n 2複雜度隨便搞都行。坑點是有重邊。include include i...