连锁店网站建设,网站建设步骤和流程,厦门网站模板,直链平台解析 熟练和固化在有些时候是等价的。 一个看起来喜闻乐见的模型。 n2n^2n2 信息量你在逗我… 结果是#xff1a;点数 n2n^2n2 TLE#xff0c;边数 n2n^2n2 AC。 一种之前所没有见过的打开方式。
还是考虑最小割模型#xff0c;点 iii 向原点连一条 AiA_iAi 的边#xf…解析 熟练和固化在有些时候是等价的。 一个看起来喜闻乐见的模型。 n2n^2n2 信息量你在逗我… 结果是点数 n2n^2n2 TLE边数 n2n^2n2 AC。 一种之前所没有见过的打开方式。
还是考虑最小割模型点 iii 向原点连一条 AiA_iAi 的边断则表示雇佣。 不同的是不再对每一对 (i,j)(i,j)(i,j) 开虚点而是直接从 iii 向汇点连一条 ∑Ei,j\sum E_{i,j}∑Ei,j 的边表示 iii 获得了所有的加成收益。 然后我们需要补偿如果 jjj 没有雇佣那么 iii 不仅无法获得收益还会付出代价两相做差应该连一条 (j,i,2Ei,j)(j,i,2E_{i,j})(j,i,2Ei,j) 的边。
即可。
思维打开
代码
#includebits/stdc.h
using namespace std;
#define ll long long
#define ull unsigned long long
#define debug(...) fprintf(stderr,__VA_ARGS__)
#define ok debug(OK\n)
using namespace std;const int N5e6100;
const ll inf2e12;
inline ll read(){ll x(0),f(1);char cgetchar();while(!isdigit(c)) {if(c-)f-1;cgetchar();}while(isdigit(c)) {x(x1)(x3)c-0;cgetchar();}return x*f;
}int n,m,id;int s,t,tot;
struct node{int to,nxt;ll cap;
}p[N1];
int fi[N],cur[N],cnt;
inline void Addline(int x,int y,ll cap){p[cnt](node){y,fi[x],cap};fi[x]cnt;
}
inline void add(int x,int y,ll c){Addline(x,y,c);Addline(y,x,0);
}
int bel[N];
int q[N],st,ed;
int bfs(){memset(bel,0,sizeof(int)*(tot1));bel[s]1;q[sted1]s;while(sted){int nowq[st];for(int icur[now]fi[now];~i;ip[i].nxt){int top[i].to;if(!p[i].cap||bel[to]) continue;bel[to]bel[now]1;q[ed]to;}}return bel[t];
}
ll dfs(int x,ll lim){if(xt||!lim) return lim;ll res(0);for(int icur[x];~i;ip[i].nxt){int top[i].to;if(bel[to]!bel[x]1) continue;ll adddfs(to,min(lim,p[i].cap));resadd;lim-add;p[i].cap-add;p[i^1].capadd;if(!lim) break;}if(!res) bel[x]-1;return res;
}
ll dinic(){ll flow(0),tmp(0);while(bfs()){while((tmpdfs(s,inf))) flowtmp;}return flow;
}ll w[N];
signed main(){#ifndef ONLINE_JUDGEfreopen(a.in,r,stdin);freopen(a.out,w,stdout);#endifmemset(fi,-1,sizeof(fi));cnt-1;totnread();stot;ttot;ll ans(0);for(int i1;in;i){int xread();add(s,i,x);}for(int i1;in;i){for(int j1;jn;j){ll xread();ansx;add(i,j,x*2);w[i]x;}}for(int i1;in;i) add(i,t,w[i]);printf(%lld\n,ans-dinic());return 0;
}