HDU 2135 最小費用流

2022-08-09 02:24:16 字數 1130 閱讀 2059

1 #include2 #include3 #include4 #include

5#define nmax 1002

6#define mmax 10005

7#define inf 99999999

8using

namespace

std;

9int

head[nmax],qu[nmax],dis[nmax],pre[nmax];

10bool

vs[nmax];

11int

n,s_edge,ans;

12struct

edge

13edge[4*mmax];

16void addedge(int u,int v,int cap,int

co)17

32void spfa(int

u)33

40 dis[u]=0

;41 vs[u]=1

;42 start=0, tail=1

;43 qu[start]=u;

44while(start!=tail)

4560}61

}62 vs[t]=0;63

if(start==nmax)start=0;64

}65//if(dis[n]==inf)return 0;

66//

return 1;67}

68void end(int s,int

t)6978}

79int

main()

8092 ans=0;93

for(i=1;i<=2;i++)

9498 printf("

%d\n

",ans);99}

100return0;

101 }

題意:有n個點,從1~n,由兩條路從1走到n,要求路徑不重複,求兩趟所走的最少距離是多少

開始考慮求兩次最短路,這個方法不靠譜,因為求完一條最短路把邊刪掉後,有可能從1到n不在連通

應為最小費流,兩點之間的權為費用,容量為1。可以控制股從1到n走兩次,也可以建乙個超級原點,到1的費用為0,流量為2

**:

POJ 2135 最小費用流

可以把每個點都當作乙個節點,去一次再回來一次可以等價為從完全不同 沒有共用邊 的兩條路徑上走過去,所以如果兩點之間有一條路的話,我們就為他新增兩條邊,一條正向一條反向 因為是無向圖,即使只考慮去的情況也要加兩條邊,保證正反都可以走,但是事實上只會走一條邊,因為如果這條邊正反都要走一遍的話,那一定是不...

POJ 2135 Farm Tour 最小費用流

若不是看了題目分類,很難想到這題和網路流掛上鉤,乍一看是求2遍最短路,但是很明顯求最短路可能是錯誤的。題意 fj 又是他 想帶朋友參觀自己的農場,農場有n個點,m條邊,要從1點到n點,再從n點走回來,且2次不能走相同的路,問最小的花費時間。題解 費用流,最小費用即為答案 我的構圖方法 定義源點和匯點...

POJ 2135 Farm Tour 最小費用流

題意 n個點,m條邊,從1號點出發到n號點,再走回來,且不能走走過的路,求最小路徑權和 最小費用流,用流量為1 限制每條邊只能走一次,建立超源匯點,源點連1號點的流量為2,費用0,匯點同理。其他邊的流量為1,費用為權值。建立超源匯點且權值為2目的是因為起終點經過2次 雖然這裡是點經過2次而題目是邊 ...