最大流+費用流
洛谷位址
第一問就直接跑最大流。
第二問目前有兩種方法:
#include
#include
#include
#include
using
namespace std;
#define inf 0x7fffffff
int n,m,k,s,t;
struct edgee[
100005];
int first[
50005
],cur[
50005
],cnt=1;
inline
void
add(
int u,
int v,
int c,
int w)
//最大流
int dep[
50005];
intbfs()
}return0;
}int
dfs(
int x,
int f)}if
(!used)dep[x]=-
1;return used;
}int
dinic()
return flow;
}//費用流
int money=
0,vis[
50005
],dis[
50005];
intspfa()
}}}//for(int i=1;i<=n;i++)cout/cout
<
0x3f3f3f3f
;//真1假0
}int
dfs2
(int x,
int f)
int used=
0,k;vis[x]=1
;for
(int i=first[x]
;i;i=e[i]
.nxt)
//if
(used==f)
break;}
}return used;
}int
zkw()}
return flow;
}int h[
100005];
intmain()
s=1;t=n;
printf
("%d "
,dinic()
);int g=cnt;
for(
int i=
2;i<=g;i++)if
(i%2==0
)add
(e[i]
.u,e[i]
.v,inf,h[i]);
else
add(e[i]
.u,e[i]
.v,0
,h[i]);
s=++n;
add(s,
1,k,0)
;add(1
,s,0,0
);zkw();
printf
("%d"
,money)
;return0;
}
ZJOI2010 網路擴容
題目描述 給定一張有向圖,每條邊都有乙個容量c和乙個擴容費用w。這裡擴容費用是指將容量擴大1所需的費用。求 1 在不擴容的情況下,1到n的最大流 2 將1到n的最大流增加k所需的最小擴容費用。輸入格式 輸入檔案的第一行包含三個整數n,m,k,表示有向圖的點數 邊數以及所需要增加的流量。接下來的m行每...
zjoi2010 網路擴容
描述 description 給定一張有向圖,每條邊都有乙個容量c和乙個擴容費用w。這裡擴容費用是指將容量擴大1所需的費用。求 1 在不擴容的情況下,1到n的最大流 2 將1到n的最大流增加k所需的最小擴容費用。輸入格式 input format 輸入檔案的第一行包含三個整數n,m,k,表示有向圖的...
ZJOI2010 網路擴容 費用流
給定一張有向圖,每條邊都有乙個容量 c 和乙個擴容費用 w 這裡擴容費用是指將容量擴大 1 所需的費用。求 在不擴容的情況下,1 到 n 的最大流 將 1 到 n 的最大流增加 k 所需的最小擴容費用。先求出原圖的最大流,大小設為 f 對於原圖中的每條邊 u,v,w 我們連邊 u,v,w,0 和 u...