[CF311E]生物学家
来源:互联网 发布:教师教育网络研修 编辑:程序博客网 时间:2024/06/07 22:40
题目描述
网络流
先想到可以把式子改写,用总资助金额减去拒绝的资助、请喝茶的费用、变性的费用。
然后变成了最小化,我们可以考虑最小割。
解决变性问题,规定靠S的这边是雄性,i是雄性s向其连vi的边表示变形就要割掉,否则i向t连vi的边。
解决条件问题,如果需求为雄性,s向i连wi(+g),i向需要节点全部连正无穷的边,因为正无穷的边不会被割,而雌性靠T,所以要么切靠T边表示变性,否则切靠S边表示条件不满足。
需求为雌性同理。
然后跑最大流。
#include<cstdio>#include<iostream>#include<algorithm>#define fo(i,a,b) for(i=a;i<=b;i++)using namespace std;const int maxn=20000+10,maxm=200000*2+10,inf=1000000000;int now[maxn],d[maxn],h[maxn],go[maxm],dis[maxm],fx[maxm],next[maxm];int v[maxn],w[maxn],len[maxn];bool sex[maxn],nsex[maxn],bz[maxn],czy;int i,j,k,l,r,s,t,n,m,q,tot,ans;void add(int x,int y,int z,int d){ go[++tot]=y; dis[tot]=z; fx[tot]=tot+d; next[tot]=h[x]; h[x]=tot;}int dfs(int x,int flow){ if (x==t){ ans+=flow; return flow; } bz[x]=1; int r=now[x],k; while (r){ if (!bz[go[r]]&&dis[r]&&d[x]==d[go[r]]+1){ k=dfs(go[r],min(flow,dis[r])); if (k){ dis[r]-=k; dis[fx[r]]+=k; now[x]=r; return k; } } r=next[r]; } now[x]=0; return 0;}bool change(){ int i,r,tmp=inf; fo(i,s,t) if (bz[i]){ r=h[i]; while (r){ if (!bz[go[r]]&&dis[r]&&d[go[r]]+1-d[i]<tmp) tmp=d[go[r]]+1-d[i]; r=next[r]; } } if (tmp==inf) return 0; fo(i,s,t) if (bz[i]) d[i]+=tmp; return 1;}int main(){ scanf("%d%d%d",&n,&m,&q); s=1;t=n+m+2; fo(i,1,n) scanf("%d",&sex[i]); fo(i,1,n) scanf("%d",&v[i]); fo(i,1,n) if (sex[i]){ add(s,i+1,v[i],1); add(i+1,s,0,-1); } else{ add(i+1,t,v[i],1); add(t,i+1,0,-1); } fo(i,1,m){ scanf("%d",&k); nsex[i]=k; scanf("%d%d",&w[i],&len[i]); fo(j,1,len[i]){ scanf("%d",&k); if (nsex[i]){ add(i+n+1,k+1,inf,1); add(k+1,i+n+1,0,-1); } else{ add(k+1,i+n+1,inf,1); add(i+n+1,k+1,0,-1); } } scanf("%d",&k); czy=k; if (nsex[i]){ add(s,i+n+1,w[i]+czy*q,1); add(i+n+1,s,0,-1); } else{ add(i+n+1,t,w[i]+czy*q,1); add(t,i+n+1,0,-1); } } ans=0; do{ fo(i,s,t) now[i]=h[i]; fill(bz+s,bz+t+1,0); while (dfs(s,inf)) fill(bz+s,bz+t+1,0); }while (change()); ans=-ans; fo(i,1,m) ans+=w[i]; printf("%d\n",ans);}
0 0
- [CF311E]生物学家
- 【GDOI2017模拟8.11】生物学家
- 看生物学家如何恶搞PLOS ONE
- 感觉有点萌的生物学家<转载的博文>
- 苹果落地的问题,牛顿看到了万有引力,生物学家看到催熟剂,我们看到了历史。
- 爬虫小试第三天
- 封装,继承,多态,抽象类,接口,Static,super, final
- 如何利用pl/sqldeveloper连接远程服务器
- 部分手机相片存储崩溃:android:targetSdkVersion引起的问题
- Android跳到截图注意事项
- [CF311E]生物学家
- AOS 自动生成代码(五) Sql VarMapper映射生成
- poj 2499 Binary Tree
- iOS中的两种主要架构及其优缺点
- AC自动机 模板与简单讲解 模板题:贴瓷砖
- Java_Pro5_人机交互之Scanner_2016_08_11
- hdu5812 区间操作
- javascript变量声明提升
- Android_Spinner实现下拉选择菜单