```cpp
Pair dijkstra() {
int ansflow = 0, anscost = 0;
while(233) {
memset(dis, 0x3f, sizeof(dis));
dis[S] = 0;
q.push(make_pair(0, S));
while(!q.empty()) {
Pair u = q.top();q.pop();
if(-dis[u.se] != u.fi) continue;
if(u.se == T) break;
for(int i = head[u.se]; i; i = e[i].nxt) {
int v = e[i].v;
int nowcost = e[i].cost + h[u.se] - h[v];
if(e[i].flow && dis[v] > dis[u.se] + nowcost) {
dis[v] = dis[u.se] + nowcost;
q.push(make_pair(-dis[v], v));
frm[v]=i;
}
}
}
if(dis[T] == inf) break;
for(int i = 1; i <= n; ++i) h[i] += dis[i];
int nowflow = inf;
for(int i = T; i != S; i = e[frm[i]].u)
nowflow=min(nowflow, e[frm[i]].flow);
for(int i = T; i != S; i = e[frm[i]].u) {
e[frm[i]].flow -= nowflow,
e[frm[i]^1].flow += nowflow;
}
ansflow += nowflow;
anscost += nowflow * h[T];
}
return make_pair(ansflow,anscost);
}
```
by ComplexPug @ 2018-12-27 17:39:30
会不会像主函数里面int a[111111111]一样爆掉
by ComplexPug @ 2018-12-27 17:41:04
因为分配栈帧的时候要重新分配内存啊,放外面就不用重新分配内存啊
by Quank123Wip @ 2018-12-27 17:42:21
@[要好](/space/show?uid=92100) 出于效率考虑,STL在pop的时候是不会释放内存的,只有在析构的时候回释放内存。所以放在里面相当于每次跑函数都申请了 $O(n)$ 的内存,但是放在外面只会申请一次 $O(n)$ 的内存。这样节省了很多动态分配内存的时间
by 一扶苏一 @ 2018-12-27 18:48:14
@[一扶苏一](/space/show?uid=65363) 可是他是放了里面快啊
他说反了
by 良月澪二 @ 2018-12-27 18:54:39
挺尬的
by 良月澪二 @ 2018-12-27 18:55:45
@[LinkedIn](/space/show?uid=78064) 这就非常的尴尬了
by 一扶苏一 @ 2018-12-27 19:02:52
刚才手误了,对不起撒
by ComplexPug @ 2018-12-27 19:13:18