[도 론]최소 비용 흐름 템 플 릿

유량 f 의 최소 비용 을 달성 하 다.
/*        (      )
 * vector  ,      G
 * V     ,     
 *      :O(F*V^2)
 */
#define INF 0x3f3f3f3f
#define MAX_V 1005
typedef pair P;
struct edge
{
    int to,cap,cost,rev;
};
int V;
vector G[MAX_V];
int h[MAX_V];
int dist[MAX_V];
int prevv[MAX_V],preve[MAX_V];
void add_edge(int from,int to,int cap,int cost)
{
    G[from].push_back((edge)
    {
        to,cap,cost,G[to].size()
    });
    G[to].push_back((edge)
    {
        from,0,-cost,G[from].size()-1
    });
}
int min_cost_flow(int s,int t,int f)
{
    int res=0;
    fill(h,h+V,0);
    while(f>0)
    {
        priority_queue

,greater

>que; fill(dist,dist+V,INF); dist[s]=0; que.push(P(0,s)); while(!que.empty()) { P p=que.top(); que.pop(); int v=p.second; if(dist[v]

0&&dist[e.to]>dist[v]+e.cost+h[v]-h[e.to]) { dist[e.to]=dist[v]+e.cost+h[v]-h[e.to]; prevv[e.to]=v; preve[e.to]=i; que.push(P(dist[e.to],e.to)); } } } if(dist[t]==INF) { return -1; } for(int v=0; v

좋은 웹페이지 즐겨찾기