線性規劃與網路流24 太空飛行計畫問題

2021-07-26 05:45:29 字數 1601 閱讀 5306

題目鏈結點這裡

最大權閉合子圖問題

構圖:將正權點與源點相連,邊的cap為權值。負權點與匯點相連邊的cap為abs(權值)。負權點與正權點的邊cap為inf。

有個結論就是,閉合子圖的最大權=sum(正權點)-最大流

具體的證明有點迷,我看了好久才看懂的,,可能以後會寫一篇部落格講解

#include#include#include#include#include#include#include#include#include#include#include#include#include#includeusing namespace std;

#define inf 0x3f3f3f3f

#define infll 0x3f3f3f3f3f3f3f3f

#define fin freopen("input.txt","r",stdin)

#define mem(x,y) memset(x,y,sizeof(x))

typedef unsigned long long ull;

typedef long long ll;

#define mx 2222

#define lson l,m,rt<<1

#define rson m+1,r,rt<<1|1

typedef pair,int> piii;

typedef pairpii;

int n,m;

int head[mx],rear;

struct edge

edge[111*mx];

void edge_init()

void edge_add(int a,int b,int cap)

bool vis[mx];

int d[mx],cur[mx];

bool bfs(int s,int t)

}return d[t]!=-1;

}int dfs(int x,int t,int a)

}return flow;

}int dinic(int s,int t)

return flow;

}bool lof;

bool int(int &a)

int main()

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

int ans=sum-dinic(0,n+m+1);

bool vvis[mx]= ;

queueq;

q.push(0);

vvis[0]=1;

while(!q.empty())}}

int cnt1=0,cnt2=0;

for(int i=1; i<=n; i++) if(vvis[i]) cnt1++;

for(int i=n+1; i<=n+m; i++) if(vvis[i]) cnt2++;

for(int i=1; i<=n; i++) if(vvis[i])

for(int i=n+1; i<=n+m; i++) if(vvis[i])

printf("%d\n",ans);

}return 0;

}

線性規劃與網路流24題 2 太空飛行計畫

線性規劃與網路流24題 2 太空飛行計畫 description w 教授正在為國家航天中心計畫一系列的太空飛行。每次太空飛行可進行一系列商業性實驗而獲取利潤。現已確定了乙個可供選擇的實驗集合e 和進行這些實驗需要使用的全部儀器的集合i 實驗ej需要用到的儀器是i的子集rj屬於i。配置儀器ik的費用...

線性規劃與網路流24題 02太空飛行計畫問題

這個題的shut5.in的資料會是多解,所以評測可能出錯。很好的乙個題。重點在向最小割的轉化。建議看一下胡泊濤的 最小割模型在資訊學競賽中的應用 裡面很詳細。也很好。include include includeusing namespace std define inf 1 30 define m...

網路流24題 太空飛行計畫

題目 洛谷p2762 解法 考慮網路流建模。設定點 1 1 n role presentation style position relative n n表示每種儀器,點n 1 n 1 n m n m 表示每個專案,超源 s s 超匯t role presentation style positio...