20230413小记

[BZOJ2406]矩阵

link

二分答案,判断可行流。

以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

link

从上往下做,碰到一定不优的就剪枝了。复杂度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球感受到了透支的体力...

posted @ 2023-04-13 14:53  洛浔  阅读(21)  评论(0编辑  收藏  举报