zjoi2010 網路擴容

2022-08-16 13:45:10 字數 2159 閱讀 7758

描述 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...