POJ 2135 Farm Tour 最小費用流

2022-05-05 05:45:10 字數 1312 閱讀 4394

很容易看出來時最小費用流,但這裡要注意是無向邊,所以要建立兩條邊。為了滿足退流時,花費還是最小,反向邊的花費要為相反數。

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次而題目是邊 ...