題目鏈結點這裡
最大權閉合子圖問題
構圖:將正權點與源點相連,邊的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...