題意:
m條有向邊連線了n個倉庫,每條邊都有一定費用。
將兩種危險品從0運到n-1,除了起點和終點外,危險品不能放在一起,也不能走相同的路徑。
求最小的費用是多少。
解析:抽象出乙個源點s乙個匯點t,源點與0相連,費用為0,容量為2。
匯點與n - 1相連,費用為0,容量為2。
每條邊之間也相連,費用為每條邊的費用,容量為1。
建圖完畢之後,求一條流量為2的最小費用流就行了。
**:
#pragma comment(linker, "/stack:1677721600")
#include #include #include #include #include #include #include #include #include #include #include #include #include #define pb push_back
#define mp make_pair
#define ll long long
#define lson lo,mi,rt<<1
#define rson mi+1,hi,rt<<1|1
#define min(a,b) ((a)<(b)?(a):(b))
#define max(a,b) ((a)>(b)?(a):(b))
#define mem0(a) memset(a,0,sizeof(a))
#define mem1(a) memset(a,-1,sizeof(a))
#define mem(a,b) memset(a,b,sizeof(a))
#define fin freopen("in.txt", "r", stdin)
#define fout freopen("out.txt", "w", stdout)
using namespace std;
const int mod = 1e9 + 7;
const double eps = 1e-8;
const double ee = exp(1.0);
const int inf = 0x3f3f3f3f;
const int maxn = 100 + 10;
const double pi = acos(-1.0);
const ll iinf = 0x3f3f3f3f3f3f3f3f;
//firs - 最短距離 second 頂點編號
typedef pairp;
struct edge
edge(int _to, int _cap, int _cost, int _rev)
};int v;//頂點數
vectorg[maxn]; //圖的鄰接表
int h[maxn]; //殘量
int dist[maxn]; //最短距離
int prev[maxn], pree[maxn]; //前驅節點 以及對於的邊
void init()
}//向圖中增加一條從fr到to容量為cap費用為cost的邊
void addedge(int fr, int to, int cap, int cost)
//求解從s到t流量為f的最小費用流
//沒有流量為f的流,返回-1
int mincostflow(int s, int t, int f)}}
if (dist[t] == inf)
for (int v = 0; v < v; v++)
h[v] += dist[v];
int d = f;
for (int v = t; v != s; v = prev[v])
f -= d;
res += d * h[t];
for (int v = t; v != s; v = prev[v])
}return res;
}int main()
int ans = mincostflow(s, t, 2);
printf("instance #%d: ", ca++);
if (ans == -1)
puts("not possible");
else
printf("%d\n", ans);
}return 0;
}
poj 2396 有上下界的網路流
題目大意 乙個mxn的矩陣,給出矩陣中每一行的和sh 1,2.m 以及每一列的數字的和目sv 1,2.n 以及矩陣中的一些元素的範圍限制,比如a 1 2 1,a 2 3 4,a 3 3 10等等,且要求矩陣中的每個元素值非負。求出,是否存在滿足所有給出的限制條件的矩陣,若存在輸出。題目分析 實現 c...
有上下界的流
acm模版 有上下界的最小 最大 流 init up為容量上界 low為容量下界 call mf limitflow n,src,sink flow為流量分配 另附 迴圈流問題 描述 無源無匯的網路n,設n是具有基礎有向圖d v,a 的網路.l和c分別為容量下界和容量上界.如果定義在a上的函式 f滿...
有上下界網路流
前言 下面寫得只是一些十分基礎的東西,是給我以後自己看的,想要徹底弄明白這個內容,推薦去看liu runda。注 為了方便,下面所有的 x,y,l,r 都表示一條從x連向y,流量下界為l,流量上界為r的邊。問題簡述 給出乙個有向圖,每條邊有流量上下界,沒有源點和匯點,要求找到一種流的方法,使得每個點...