• bzoj2245: [SDOI2011]工作安排


    被坑坏了。。。本来想练一下zkw,结果TLE

    这个值域可以到LL范围。。。

    这么sb的费用流就没什么好说的了

    #include<cstdio>
    #include<iostream>
    #include<cstring>
    #include<cstdlib>
    #include<algorithm>
    #include<cmath>
    using namespace std;
    typedef long long LL;
    const int inf=(1<<30)-1;
    
    struct node
    {
        int x,y,c,next;LL d;
    }a[310000];int len,last[21000];
    void ins(int x,int y,int c,LL d)
    {
        len++;
        a[len].x=x;a[len].y=y;a[len].c=c;a[len].d=d;
        a[len].next=last[x];last[x]=len;
        
        len++;
        a[len].x=y;a[len].y=x;a[len].c=0;a[len].d=-d;
        a[len].next=last[y];last[y]=len;
    }
    
    int st,ed;
    int pre[21000],cc[21000];LL d[21000],ans;
    int list[21000];bool v[21000];
    bool spfa()
    {
        memset(d,63,sizeof(d));d[st]=0;cc[st]=(1<<30);
        memset(v,false,sizeof(v));v[st]=true;
        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&&d[y]>d[x]+a[k].d)
                {
                    d[y]=d[x]+a[k].d;
                    cc[y]=min(a[k].c,cc[x]);
                    pre[y]=k;
                    if(v[y]==false)
                    {
                        v[y]=true;
                        list[tail]=y;
                        tail++;if(tail==20100)tail=1;
                    }
                }
            }
            v[x]=false;
            head++;if(head==20100)head=1;
        }
        if(d[ed]==d[0])return false;
        else
        {
            int y=ed;ans+=cc[ed]*d[ed];
            while(y!=st)
            {
                int k=pre[y];
                a[k].c-=cc[ed];
                a[k^1].c+=cc[ed];
                y=a[k].x;
            }
            return true;
        }
    }
    
    int c[310],aa[310][310];
    int Tlen[310],T[310][10],z,id[310][10];LL w[310][10];
    int main()
    {
        freopen("a.in","r",stdin);
        freopen("a.out","w",stdout);
        int m,n;
        scanf("%d%d",&m,&n); st=1,ed=2;
        len=1;memset(last,0,sizeof(last));
        for(int i=1;i<=n;i++)
        {
            scanf("%d",&c[i]);
            ins(st,i+2,c[i],0);
        }
        for(int i=1;i<=m;i++)
            for(int j=1;j<=n;j++)
                scanf("%d",&aa[i][j]);
        z=n+2;
        for(int i=1;i<=m;i++)
        {
            scanf("%d",&Tlen[i]);
            for(int j=1;j<=Tlen[i];j++)scanf("%d",&T[i][j]);
            T[i][Tlen[i]+1]=inf+T[i][Tlen[i]];
            for(int j=1;j<=Tlen[i]+1;j++)
            {
                scanf("%lld",&w[i][j]),id[i][j]=++z;
                ins(id[i][j],ed,T[i][j]-T[i][j-1],0);
            }
        }
        for(int i=1;i<=m;i++)
            for(int j=1;j<=n;j++)
                if(aa[i][j]==1)
                    for(int k=1;k<=Tlen[i]+1;k++)
                        ins(j+2,id[i][k],inf,w[i][k]);
        //~~~~~~~~~~~~~~~~~~~composition~~~~~~~~~~~~~~~~~~~~~~~~~~~
        
        ans=0;    
        while(spfa());
        printf("%lld
    ",ans);
        
        return 0;
    }
  • 相关阅读:
    Hibernate 补充 ManyToOne、OneToMany、OneToOne的使用例
    Lint found fatal errors while assembling a release target
    5、jeecg 笔记之 minidao 条件判断
    4、jeecg 笔记之 自定义显示按钮 (exp 属性)
    restful api
    我学不动了...
    6、Flutter Error waiting for a debug connection: ProcessException: adb did not report f(转)
    5、Flutter 实现 ViewPager、bottomNavigationBar 界面切换
    4、Flutter 采坑记录篇二_依赖库不兼容
    3、Finished with error: FormatException: Bad UTF-8 encoding 0xc3 (at offset 169)
  • 原文地址:https://www.cnblogs.com/AKCqhzdy/p/10211481.html
Copyright © 2020-2023  润新知