最小費用流(km的另一種使用思路)

2021-08-24 20:53:23 字數 1234 閱讀 4737

大體意思就是:h代表旅館,m代表人,人每走動乙個需要乙個金幣,行動只有兩個方向,水平或者豎直。問你最終讓所有人都能到達旅館並且花的總費用最少。

具體思路:一開始我是按照km的初級使用進行敲的,結果發現第二組樣例過不了,然後km也打的沒問題,看了網上的**,才發現自己的思路錯了。這個題的目的是讓你花費最小,而km的初級使用是讓總費用最低,如果按照一開始的打的話,就南轅北轍了。

但是,花費最小的話,只需要存值的時候把原來的任意兩個人和旅館之間距離賦為負值就可以了。

ac**:

#includeusing namespace std;

# define maxn 100+10

# define inf 0x3f3f3f3f

int n,m;

char a[maxn][maxn];

int dis[maxn][maxn];

int nx[maxn*maxn],ny[maxn*maxn];

int visx[maxn*maxn],visy[maxn*maxn];

int slack[maxn*maxn];

int net[maxn*maxn];

int t1,t2;

struct node

node (int xx,int yy)

} pro[maxn*maxn],hou[maxn*maxn];

void init1()

memset(ny,0,sizeof(ny));

memset(dis,0,sizeof(dis));

memset(net,0,sizeof(net));

}void init2()

bool find(int t)}}

else slack[i]=min(temp,slack[i]);

}return false;

}int km()

}for(int i=1; i<=t1; i++)

}for(int i=1; i<=t2; i++)}}

}int sum=0;

for(int i=1; i<=t1; i++)

}return sum;

}int main()

else if(a[i][j]=='h')}}

for(int i=1; i<=t1; i++)

}int t=km();

cout<<-t<}

return 0;

}

最小費用流(km的另一種使用思路)

大體意思就是 h代表旅館,m代表人,人每走動乙個需要乙個金幣,行動只有兩個方向,水平或者豎直。問你最終讓所有人都能到達旅館並且花的總費用最少。具體思路 一開始我是按照km的初級使用進行敲的,結果發現第二組樣例過不了,然後km也打的沒問題,看了網上的 才發現自己的思路錯了。這個題的目的是讓你花費最小,...

選擇排序的另一種思路

在我們上次的選擇迴圈中,我們用了乙個minindex變數來儲存最小值的下標,每次迴圈完畢後用最小值下標的元素與手元素進行交換,遍歷一次,記錄下最值元素所在位置,遍歷結束後,將此最值元素調整到合適的位置。但是我們還有種交換變數的方式,我們可以用待排序陣列中的元素與待排序序列中的首元素比較,如果比待排序...

詳解KMP演算法 另一種思路

這個演算法單純從 理解起來比較費勁.我覺得從思路上理解是非常簡單的.傳統演算法的劣勢很容易察覺.那就是會有重複的匹配過程.我們假定 text為待查文字,pattern 為匹配串.text aaaab pattern ab 按以下傳統演算法.則直到迴圈到最後一次比較.才找到 ab 而前面很多迴圈都是做...