题意:
有一个无向图..农夫从1号点出发..要到达N号点..然后回到1号点..来回不能走相同的路径..问最短的距离是多少...
题解:
超级源点向1号点做边..容量为2...n号点向超级汇点做边..容量为2...然后就是根据给的边给两个点做边..注意的是最小费用最大流在做无向图边时不像最大流时那样.直接把那容量为0的反向边容量改成相同的..而是要扎扎实实的加两次..因为费用这个变量的存在...
Program:
#include<iostream>
#include<algorithm>
#include<stdio.h>
#include<string.h>
#include<math.h>
#include<queue>
#define MAXN 1080005
#define MAXM 8000005
#define oo 1000000007
#define ll long long
using namespace std;
struct MCMF
{
struct node
{
int x,y,c,v,next;
}line[MAXM];
int Lnum,_next[MAXN],pre[MAXN],dis[MAXN],flow,cost;
bool inqueue[MAXN];
void initial(int n)
{
Lnum=-1;
for (int i=0;i<=n;i