描述 description
給定一張有向圖,每條邊都有乙個容量c和乙個擴容費用w。這裡擴容費用是指將容量擴大1所需的費用。求:
1、 在不擴容的情況下,1到n的最大流;
2、 將1到n的最大流增加k所需的最小擴容費用。
輸入格式 input format
輸入檔案的第一行包含三個整數n,m,k,表示有向圖的點數、邊數以及所需要增加的流量。
接下來的m行每行包含四個整數u,v,c,w,表示一條從u到v,容量為c,擴容費用為w的邊。
輸出格式 output format
輸出檔案一行包含兩個整數,分別表示問題1和問題2的答案。
樣例輸入 sample input
5 8 2
1 2 5 8
2 5 9 9
5 1 6 2
5 1 1 8
1 2 8 7
2 5 4 9
1 2 1 1
1 4 2 1
樣例輸出 sample output
13 19
時間限制 time limitation
1s注釋 hint
30%的資料中,n<=100
100%的資料中,n<=1000,m<=5000,k<=10
** source
zjoi2010
今天把oj上費用流的題寫完了,真心的毒哇...........不僅建圖的能力提公升了,**細節.........不說了
思路:這個題就先建將u到v的這一條邊費用為0,容量為c建一條邊。然後在在u到v建一條費用為w,容量為正無窮的邊。然後跑一邊最大流,之後再在0到1連一條容量為k費用為0的邊,然後再跑一邊費用流就好了。然後寫完之後莫名其妙的徐王......後來發現自己又智障的打錯了變數名_(:з」∠)_
**如下:
#include#include(=´ω`=)#include
#include
#include
#define inf 0x7fffffff
using
namespace
std;
inline
intread()
while(ch>='
0'&&ch<='9'
)
return x*f;
}struct
shadow
a[50000
];int lin[500000],len=1,s=0
,t;void insert(int x,int y,int v,int
c)int l[50000],q[50000
];int
n,m,k;
bool
make_level()}}
return l[n]>=0;}
int max(int k,int
flow)}}
if(!maxflow)
l[k]=-1
;
return
maxflow;
}int ans=0
;void
dinic()
int w[50000],dis[50000],pre[50000],pro[50000
];bool vis[50000
];bool
spfa()
pre[tmp]=tn;
pro[tmp]=i;}}
}return dis[n]!=dis[n+1];}
void
agu()
ans+=x*dis[n];
}int q[50000],w[50000],e[50000],r[50000
];int
main()
dinic();
insert(
0,1,k,0
); ans=0
;
while
(spfa())
agu();
cout
return0;
}
ZJOI2010 網路擴容
題目描述 給定一張有向圖,每條邊都有乙個容量c和乙個擴容費用w。這裡擴容費用是指將容量擴大1所需的費用。求 1 在不擴容的情況下,1到n的最大流 2 將1到n的最大流增加k所需的最小擴容費用。輸入格式 輸入檔案的第一行包含三個整數n,m,k,表示有向圖的點數 邊數以及所需要增加的流量。接下來的m行每...
ZJOI2010 網路擴容
最大流 費用流 洛谷位址 第一問就直接跑最大流。第二問目前有兩種方法 include include include include using namespace std define inf 0x7fffffff int n,m,k,s,t struct edgee 100005 int fir...
ZJOI2010 網路擴容 費用流
給定一張有向圖,每條邊都有乙個容量 c 和乙個擴容費用 w 這裡擴容費用是指將容量擴大 1 所需的費用。求 在不擴容的情況下,1 到 n 的最大流 將 1 到 n 的最大流增加 k 所需的最小擴容費用。先求出原圖的最大流,大小設為 f 對於原圖中的每條邊 u,v,w 我們連邊 u,v,w,0 和 u...