time limit: 3 sec
memory limit: 64 mb
submit: 2390
solved: 1206 [
submit][
status][
discuss]
給定一張有向圖,每條邊都有乙個容量c和乙個擴容費用w。這裡擴容費用是指將容量擴大1所需的費用。求: 1、 在不擴容的情況下,1到n的最大流; 2、 將1到n的最大流增加k所需的最小擴容費用。
輸入檔案的第一行包含三個整數n,m,k,表示有向圖的點數、邊數以及所需要增加的流量。 接下來的m行每行包含四個整數u,v,c,w,表示一條從u到v,容量為c,擴容費用為w的邊。
輸出檔案一行包含兩個整數,分別表示問題1和問題2的答案。
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
13 19
30%的資料中,n<=100
100%的資料中,n<=1000,m<=5000,k<=10
解題思路:第一問就是最大流,然後第二問,可以對在建m條邊,只是產生費用,再來乙個源點,到一的容量為k。跑一邊費用流。
#include
#include
#include
#include
using namespace std;
int n,m,k,len,ans;
int from[21000],to[21000],cc[21000],ww[21000],next[21000];
int h[1100];
int dis[1100];
int q[1000000];
bool og[1100];
int pre[1100];
int x[5100],y[5100],c[5100],w[5100];
inline int read()
while (y>='0' && y<='9')
return x*f;
}void insert(int x,int y,int c,int w)
int dicnic(int sum,int now)
}u=next[u];
}if (sug==0) dis[now]=-1;
return sug;
}bool bfs()
u=next[u];}}
if (dis[n]!=-1) return true; else return false;
}bool spfa()
}u=next[u];
}og[q[head]]=true;
}if (dis[n]<1000000) return true;else return false;
} void mcf()
now=n;
while (now!=0)
} int main()
int sum=0;
while (bfs())
printf("%d ",sum);
insert(0,1,k,0); insert(1,0,-k,0);
for (int i=1;i<=m;++i)
ans=0;
while (spfa())
printf("%d",ans);
}
bzoj1834(網路流 費用流)
給定一張有向圖,每條邊都有乙個容量c和乙個擴容費用w。這裡擴容費用是指將容量擴大1所需的費用。求 1 在不擴容的情況下,1到n的最大流 2 將1到n的最大流增加k所需的最小擴容費用。第一問裸的網路流 第二問 新建乙個匯點,將n號點與匯點相連,容量為k,限制最多增大的流量 費用為0 將原先每一條邊都新...
bzoj 1834 網路流(最大流 費用流)
題意 n個點,m條無向邊,每條邊有乙個容量和擴容費用 容量擴大1的費用 2個詢問 1 不擴容下的1 n最大流 2 將最大流增加k的最小費用 強行湊出的網路流經典題麼 23333 對於第一問,裸跑最大流即可 第二問的建圖還是很不錯的,一開始認為,應該重新建邊,容量為k,費用是給題目給的。but,too...
bzoj1834 網路擴容 網路流
好久沒寫題解了啊 給你一幅n個點的網路,先求出其1到n的最大流,每條弧還會有個屬性co sti cos ti 表示沒擴容乙個單位的費用,現在我們要求的就是擴容k個單位的最小費用 這是一道比較裸的網路流,第一問直接dinic就是了,重點就在於第二問。我們把第一問的殘量網路繼續利用,其中的每條弧的費用都...