博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
bzoj4873: [Shoi2017]寿司餐厅
阅读量:4914 次
发布时间:2019-06-11

本文共 1261 字,大约阅读时间需要 4 分钟。

调了大半个钟居然是len没有初始化。。。

好好的恶补了一下最大权闭合子图呢。。构图大概是这样的:

然而中间寿司连方案的话边数可以到n^3的,这样会很龟

所以可以用一个小trick,对于l,r,假如l+1,r和l,r-1都OK,也就OK了,所以这两个点向l,r连边,这样就降到n^2了

#include
#include
#include
#include
#include
#include
using namespace std;const int inf=(1<<30)-1;struct node{ int x,y,c,next;}a[210000];int len,last[11000];void ins(int x,int y,int c){ len++; a[len].x=x;a[len].y=y;a[len].c=c; a[len].next=last[x];last[x]=len; len++; a[len].x=y;a[len].y=x;a[len].c=0; a[len].next=last[y];last[y]=len;}int h[11000],st,ed;int list[11000];bool bt_h(){ memset(h,0,sizeof(h));h[st]=1; int head=1,tail=2;list[1]=st; while(head!=tail) { int x=list[head]; for(int k=last[x];k;k=a[k].next) { int y=a[k].y; if(a[k].c>0&&h[y]==0) { h[y]=h[x]+1; list[tail++]=y; } } head++; } return h[ed]!=0;}int findflow(int x,int f){ if(x==ed)return f; int s=0; for(int k=last[x];k;k=a[k].next) { int y=a[k].y; if(a[k].c>0&&h[y]==h[x]+1&&s
=0)ins(mid[i][j],ed,mp[i][j]),sum+=mp[i][j]; else ins(st,mid[i][j],-mp[i][j]); } //......composition............ int ans=0; while(bt_h()) { ans+=findflow(st,inf); } printf("%d\n",sum-ans); return 0;}

 

转载于:https://www.cnblogs.com/AKCqhzdy/p/10252267.html

你可能感兴趣的文章
【IE6的疯狂之二】IE6中PNG Alpha透明(全集)
查看>>
第一个Shell脚本
查看>>
C++ 小笔记
查看>>
zabbix 安装rpm
查看>>
PhantomJS:Full web stack,No browser required
查看>>
Git远程操作详解
查看>>
java课后思考问题(七)
查看>>
5.9 容器
查看>>
创建oracle数据库的表空间、用户、目录、导入\导出文件等信息
查看>>
php禁止浏览器使用缓存页面的方法
查看>>
django的模型类管理器-----------数据库操作的封装
查看>>
java 回调
查看>>
CF1100E Andrew and Taxi 二分答案+拓扑排序
查看>>
子弹朝向问题的解决,移动方法的编写
查看>>
$("#id a") - $("#id .c a") = ?
查看>>
题目1034:寻找大富翁---用了sort()函数,注意头文件;
查看>>
Windows下Wamp装不上Memcache扩展
查看>>
js中数组的map()方法
查看>>
wpa破解学习实践
查看>>
USACO 2008 FEB Eating Together
查看>>