POJ2135 來回最短路(簡單費用流)

2021-06-26 05:31:20 字數 1477 閱讀 2482

題意:

就是從1走到n然後再走回來,一條邊只能走一次,要求路徑最短。

思路:

比較水,可以直接一遍費用流,不解釋了,具體的看看**,敲這個題就是為了練

練手,好久不敲了,怕比賽手生。

#include

#include

#include

#define n_node 1000 + 10

#define n_edge 40000 + 20

#define inf 100000000

using namespace std;

typedef struct

star;

star e[n_edge];

int list[n_node] ,tot;

int mer[n_edge];

int s_x[n_node];

void add(int a ,int b ,int c ,int d)

bool spfa(int s ,int t ,int n)

;for(int i = 0 ;i <= n ;i ++) s_x[i] = inf;

mark[s] = 1 ,s_x[s] = 0;

queueq;

q.push(s);

memset(mer ,255 ,sizeof(mer));

while(!q.empty())}}

}return mer[t] != -1;

}

int m_c_flow(int s ,int t ,int n)

maxflow += minflow;

}return mincost;

}

int main ()

add(0 ,1 ,0 ,2);

add(n ,n + 1 ,0 ,2);

printf("%d\n" ,m_c_flow(0 ,n + 1 ,n + 1));

}return 0;

}

POJ 2135 最小費用流

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

poj 2135 最小費用最大流

題意是正向走一次反向走一次,每條路只能走一次,問走最少距離是多少。解題方法 每條路流量為1,費用為距離,建立乙個超級源與超級匯流量為2,費用為0,將超級源連線至點1上,超級匯連線至點n上,這樣求1次最大流就能出來正反兩次走法了,就不用反圖去找了。因為為無向圖,所以每條路建兩次邊,正向一次反向一次。i...

poj 2135 最小費用最大流

題意 給定乙個無向圖,要從1點到n點再返回1點,每條邊最多走一次,問最短需要走多遠。分析 最小費用最大流,把題意看成是要找兩條無交集的從1到n的路線,使距離和最小。圖中的點和邊就是網路流圖中的點和邊。設定乙個源,接到1點,設定乙個匯,從n點接到匯。為保證無交集,我們把每條邊的流量設定為1,而源發出的...