很容易看出來時最小費用流,但這裡要注意是無向邊,所以要建立兩條邊。為了滿足退流時,花費還是最小,反向邊的花費要為相反數。
1//status:g++_ac_32ms_980kb
2 #include3 #include4 #include
5 #include6 #include7 #include
8 #include9 #include10 #include11 #include12 #include13
using
namespace
std;
14#define ll __int64
15#define pii pair16
#define max(a,b) ((a)>(b)?(a):(b))
17#define min(a,b) ((a)<(b)?(a):(b))
18#define mem(a,b) memset(a,b,sizeof(a))
19#define lson l,mid,rt<<1
20#define rson mid+1,r,rt<<1|1
21const
int max=1010,inf=0x3f3f3f3f;22
const ll llnf=0x3f3f3f3f3f3f3f3fll;
2324
struct
edgee[max*40
];27
28int d[max],first[max],next[max*40
],inq[max],p[max];
29int
n,m,s,t,mt;
3031
void adde(int a,int b,int c,int
val)
3738
intmincost()
3960}61
}62}63
if(d[t]==inf)break;64
for(i=p[t];i!=-1;i=p[e[i].u])
65if(e[i].cape[i].cap;
66for(i=p[t];i!=-1;i=p[e[i].u])
70 cost+=d[t]*a;71}
72return
cost;73}
7475
intmain()
7689 adde(s,1,2,0
);90
91 printf("
%d\n
",mincost());92}
93return0;
94 }
POJ 2135 Farm Tour 最小費用流
若不是看了題目分類,很難想到這題和網路流掛上鉤,乍一看是求2遍最短路,但是很明顯求最短路可能是錯誤的。題意 fj 又是他 想帶朋友參觀自己的農場,農場有n個點,m條邊,要從1點到n點,再從n點走回來,且2次不能走相同的路,問最小的花費時間。題解 費用流,最小費用即為答案 我的構圖方法 定義源點和匯點...
poj2135Farm Tour 最小費用最大流
題目要求從1到n走一遍再從n到1走一遍而且有重邊,相當於從1到n走兩邊 所以加乙個源點0 1,費用為0,流量為2 加乙個匯點n 1 n,費用為0,流量為2 中間的邊流量為1 只走一遍 費用為c 然後一遍0 n 1的費用流 要注意是無向圖,所以乙個輸入有4條邊 a b c,1 b a c,0 b a ...
POJ 2135 Farm Tour 最小費用流
題意 n個點,m條邊,從1號點出發到n號點,再走回來,且不能走走過的路,求最小路徑權和 最小費用流,用流量為1 限制每條邊只能走一次,建立超源匯點,源點連1號點的流量為2,費用0,匯點同理。其他邊的流量為1,費用為權值。建立超源匯點且權值為2目的是因為起終點經過2次 雖然這裡是點經過2次而題目是邊 ...