20230413小记
[BZOJ2406]矩阵
二分答案,判断可行流。
以x,y坐标为点。
s->i 容量[sumi[i]-x,sumi[i]+x] sumi[i]表示第i行的总和
j->t 容量[sumj[j]-x,sumj[j]+x] sumj[j]表示第j行的总和
i->j 容量[l,r]
from
#include<bits/stdc++.h>
using namespace std;
const int N=505,M=1e6+5;
int S,T,ss,tt,n,m;
class Dinic{
public:
int hd[N],cur[N],cntedge=1;const int INF=2e9;struct node{int to,val,nxt;}a[M<<1];
inline void add(int u,int v,int w){AddEdge(u,v,w);AddEdge(v,u,0);}inline void AddEdge(int u,int v,int w){a[++cntedge]=(node){v,w,hd[u]};hd[u]=cntedge;}
int do_Dinic(){int ret=0;while(bfs()){ret+=dfs(S,INF);}return ret;}
void set_ST(int ss,int tt){S=ss,T=tt;}
inline void init(){memset(hd,0,sizeof(hd));cntedge=1;}
int dis[N];
bool bfs(){memset(dis,-1,sizeof(dis));memcpy(cur,hd,sizeof(hd));queue<int> q;q.push(S);dis[S]=0;while(!q.empty()){int u=q.front();q.pop();for(int i=hd[u];i;i=a[i].nxt){int to=a[i].to;if(dis[to]==-1&&a[i].val){dis[to]=dis[u]+1;q.push(to);}}}return dis[T]!=-1;}
int dfs(int u,int flow){if(u==T) return flow;int now=0;for(int i=cur[u];i&&now<flow;i=a[i].nxt){cur[u]=i;int to=a[i].to;if(dis[to]==dis[u]+1&&a[i].val){int dlt=dfs(to,min(flow-now,a[i].val));a[i].val-=dlt,a[i^1].val+=dlt;now+=dlt;}}return now;}
}D;
int du[N],xx[N],yy[N],L,R;
bool check(int mid){
D.init();
memset(du,0,sizeof(du));
for(int i=1;i<=n;i++)
for(int j=1;j<=m;j++)
D.add(i,j+n,R-L),du[j+n]-=L,du[i]+=L;
for(int i=1;i<=n;i++) D.add(ss,i,2*mid),du[i]-=xx[i]-mid,du[ss]+=xx[i]-mid;
for(int i=1;i<=m;i++) D.add(i+n,tt,2*mid),du[i+n]+=yy[i]-mid,du[tt]-=yy[i]-mid;
D.add(tt,ss,D.INF);
int tmp=0;
for(int i=ss;i<=tt;i++)
if(du[i]<0) D.add(S,i,-du[i]);
else D.add(i,T,du[i]),tmp+=du[i];
return D.do_Dinic()==tmp;
}
int main(){
scanf("%d%d",&n,&m);
tt=n+m+1,S=n+m+2,T=n+m+3;
for(int i=1;i<=n;i++){
for(int j=1,x;j<=m;j++) {
scanf("%d",&x),xx[i]+=x,yy[j]+=x;
}
}
cin>>L>>R;
int l=0,r=1000000,ans;
while(l<=r){
int mid=(l+r)>>1;
if(check(mid)) ans=mid,r=mid-1;
else l=mid+1;
}
cout<<ans<<endl;
return 0;
}
CF68D Half-decay tree
从上往下做,碰到一定不优的就剪枝了。复杂度h的
//#pragma GCC optimize(2)
#include<bits/stdc++.h>
using namespace std;
int n,q;
#define db double
map<int,db>mp;
double dfs(int u,db mx){
if(mx>=mp[u]) return mx;
return (dfs(u<<1,max(mx,mp[u]-mp[u<<1]))+dfs(u<<1|1,max(mx,mp[u]-mp[u<<1|1])))/2;
}
void update(int pos,int val){
if(!pos) return ;
mp[pos]+=val;
update(pos>>1,val);
}
int main(){
scanf("%d%d",&n,&q);
while(q--){
char s[10];int pos,val;
scanf("%s",s+1);
if(s[1]=='d'){
// cout<<114514<<endl;
printf("%.8lf\n",dfs(1,0));
}
else {
scanf("%d%d",&pos,&val);
update(pos,val);
}
}
return 0;
}
废话
身体素质不行打球快虚脱了()wgy哥哥真的好可爱/kel
都好强啊。一看都是练过的()
只有我是肌无力 麻了
就是说球拍都拿不住是一种什么体验...
不知道为什么 没来头的崩溃......
大概是感觉孤独(
难道不应该早都免疫了吗......
亲手撕开承担不住永恒的梦
我追逐的泡沫 原来如此沉重
如今我再也不回头 向注定的毁灭无所惧地行走
”未来“
又睡了1h......
好困。不让我睡午觉我要死了,但是中午跟着神仙同桌去看福瑞...
听妄想症:首先我不是百合豚,但是后面忘了。
就是说打了1h球感受到了透支的体力...