1 #include2 #include3 #include4 #include5#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次而題目是邊 ...