• bzoj2661: [BeiJing wc2012]连连看


    突然发现打勾股数的表是不需要的。

    但是打都打了,就不改了。

    拆点,左边的点连向右边可匹配的点,然后直接费用流即可。因为对于最优解,两个数一定是相互选择的。所以答案除个2就行。

    最大费用最大流把费用改成负数就可以直接用最小跑了。

    #include<cstdio>
    #include<iostream>
    #include<cstring>
    #include<cstdlib>
    #include<algorithm>
    #include<cmath>
    using namespace std;
    
    bool mp[1100][1100];
    void initmp()
    {
        memset(mp,false,sizeof(mp));
        mp[5][4]=true;
        mp[5][3]=true;
        mp[13][12]=true;
        mp[13][5]=true;
        mp[17][15]=true;
        mp[17][8]=true;
        mp[25][24]=true;
        mp[25][7]=true;
        mp[29][21]=true;
        mp[29][20]=true;
        mp[37][35]=true;
        mp[37][12]=true;
        mp[41][40]=true;
        mp[41][9]=true;
        mp[53][45]=true;
        mp[53][28]=true;
        mp[61][60]=true;
        mp[61][11]=true;
        mp[65][56]=true;
        mp[65][33]=true;
        mp[65][63]=true;
        mp[65][16]=true;
        mp[73][55]=true;
        mp[73][48]=true;
        mp[85][77]=true;
        mp[85][36]=true;
        mp[85][84]=true;
        mp[85][13]=true;
        mp[89][80]=true;
        mp[89][39]=true;
        mp[97][72]=true;
        mp[97][65]=true;
        mp[101][99]=true;
        mp[101][20]=true;
        mp[109][91]=true;
        mp[109][60]=true;
        mp[113][112]=true;
        mp[113][15]=true;
        mp[125][117]=true;
        mp[125][44]=true;
        mp[137][105]=true;
        mp[137][88]=true;
        mp[145][143]=true;
        mp[145][24]=true;
        mp[145][144]=true;
        mp[145][17]=true;
        mp[149][140]=true;
        mp[149][51]=true;
        mp[157][132]=true;
        mp[157][85]=true;
        mp[169][120]=true;
        mp[169][119]=true;
        mp[173][165]=true;
        mp[173][52]=true;
        mp[181][180]=true;
        mp[181][19]=true;
        mp[185][153]=true;
        mp[185][104]=true;
        mp[185][176]=true;
        mp[185][57]=true;
        mp[193][168]=true;
        mp[193][95]=true;
        mp[197][195]=true;
        mp[197][28]=true;
        mp[205][156]=true;
        mp[205][133]=true;
        mp[205][187]=true;
        mp[205][84]=true;
        mp[221][171]=true;
        mp[221][140]=true;
        mp[221][220]=true;
        mp[221][21]=true;
        mp[229][221]=true;
        mp[229][60]=true;
        mp[233][208]=true;
        mp[233][105]=true;
        mp[241][209]=true;
        mp[241][120]=true;
        mp[257][255]=true;
        mp[257][32]=true;
        mp[265][247]=true;
        mp[265][96]=true;
        mp[265][264]=true;
        mp[265][23]=true;
        mp[269][260]=true;
        mp[269][69]=true;
        mp[277][252]=true;
        mp[277][115]=true;
        mp[281][231]=true;
        mp[281][160]=true;
        mp[289][240]=true;
        mp[289][161]=true;
        mp[293][285]=true;
        mp[293][68]=true;
        mp[305][224]=true;
        mp[305][207]=true;
        mp[305][273]=true;
        mp[305][136]=true;
        mp[313][312]=true;
        mp[313][25]=true;
        mp[317][308]=true;
        mp[317][75]=true;
        mp[325][253]=true;
        mp[325][204]=true;
        mp[325][323]=true;
        mp[325][36]=true;
        mp[337][288]=true;
        mp[337][175]=true;
        mp[349][299]=true;
        mp[349][180]=true;
        mp[353][272]=true;
        mp[353][225]=true;
        mp[365][357]=true;
        mp[365][76]=true;
        mp[365][364]=true;
        mp[365][27]=true;
        mp[373][275]=true;
        mp[373][252]=true;
        mp[377][345]=true;
        mp[377][152]=true;
        mp[377][352]=true;
        mp[377][135]=true;
        mp[389][340]=true;
        mp[389][189]=true;
        mp[397][325]=true;
        mp[397][228]=true;
        mp[401][399]=true;
        mp[401][40]=true;
        mp[409][391]=true;
        mp[409][120]=true;
        mp[421][420]=true;
        mp[421][29]=true;
        mp[425][304]=true;
        mp[425][297]=true;
        mp[425][416]=true;
        mp[425][87]=true;
        mp[433][408]=true;
        mp[433][145]=true;
        mp[445][396]=true;
        mp[445][203]=true;
        mp[445][437]=true;
        mp[445][84]=true;
        mp[449][351]=true;
        mp[449][280]=true;
        mp[457][425]=true;
        mp[457][168]=true;
        mp[461][380]=true;
        mp[461][261]=true;
        mp[481][360]=true;
        mp[481][319]=true;
        mp[481][480]=true;
        mp[481][31]=true;
        mp[485][476]=true;
        mp[485][93]=true;
        mp[485][483]=true;
        mp[485][44]=true;
        mp[493][468]=true;
        mp[493][155]=true;
        mp[493][475]=true;
        mp[493][132]=true;
        mp[505][377]=true;
        mp[505][336]=true;
        mp[505][456]=true;
        mp[505][217]=true;
        mp[509][459]=true;
        mp[509][220]=true;
        mp[521][440]=true;
        mp[521][279]=true;
        mp[533][435]=true;
        mp[533][308]=true;
        mp[533][525]=true;
        mp[533][92]=true;
        mp[541][420]=true;
        mp[541][341]=true;
        mp[545][513]=true;
        mp[545][184]=true;
        mp[545][544]=true;
        mp[545][33]=true;
        mp[557][532]=true;
        mp[557][165]=true;
        mp[565][403]=true;
        mp[565][396]=true;
        mp[565][493]=true;
        mp[565][276]=true;
        mp[569][520]=true;
        mp[569][231]=true;
        mp[577][575]=true;
        mp[577][48]=true;
        mp[593][465]=true;
        mp[593][368]=true;
        mp[601][551]=true;
        mp[601][240]=true;
        mp[613][612]=true;
        mp[613][35]=true;
        mp[617][608]=true;
        mp[617][105]=true;
        mp[625][527]=true;
        mp[625][336]=true;
        mp[629][460]=true;
        mp[629][429]=true;
        mp[629][621]=true;
        mp[629][100]=true;
        mp[641][609]=true;
        mp[641][200]=true;
        mp[653][572]=true;
        mp[653][315]=true;
        mp[661][589]=true;
        mp[661][300]=true;
        mp[673][552]=true;
        mp[673][385]=true;
        mp[677][675]=true;
        mp[677][52]=true;
        mp[685][667]=true;
        mp[685][156]=true;
        mp[685][684]=true;
        mp[685][37]=true;
        mp[689][561]=true;
        mp[689][400]=true;
        mp[689][680]=true;
        mp[689][111]=true;
        mp[697][528]=true;
        mp[697][455]=true;
        mp[697][672]=true;
        mp[697][185]=true;
        mp[701][651]=true;
        mp[701][260]=true;
        mp[709][660]=true;
        mp[709][259]=true;
        mp[725][627]=true;
        mp[725][364]=true;
        mp[725][644]=true;
        mp[725][333]=true;
        mp[733][725]=true;
        mp[733][108]=true;
        mp[745][624]=true;
        mp[745][407]=true;
        mp[745][713]=true;
        mp[745][216]=true;
        mp[757][595]=true;
        mp[757][468]=true;
        mp[761][760]=true;
        mp[761][39]=true;
        mp[769][600]=true;
        mp[769][481]=true;
        mp[773][748]=true;
        mp[773][195]=true;
        mp[785][736]=true;
        mp[785][273]=true;
        mp[785][783]=true;
        mp[785][56]=true;
        mp[793][665]=true;
        mp[793][432]=true;
        mp[793][775]=true;
        mp[793][168]=true;
        mp[797][572]=true;
        mp[797][555]=true;
        mp[809][759]=true;
        mp[809][280]=true;
        mp[821][700]=true;
        mp[821][429]=true;
        mp[829][629]=true;
        mp[829][540]=true;
        mp[841][840]=true;
        mp[841][41]=true;
        mp[845][836]=true;
        mp[845][123]=true;
        mp[845][837]=true;
        mp[845][116]=true;
        mp[853][828]=true;
        mp[853][205]=true;
        mp[857][825]=true;
        mp[857][232]=true;
        mp[865][703]=true;
        mp[865][504]=true;
        mp[865][816]=true;
        mp[865][287]=true;
        mp[877][805]=true;
        mp[877][348]=true;
        mp[881][800]=true;
        mp[881][369]=true;
        mp[901][780]=true;
        mp[901][451]=true;
        mp[901][899]=true;
        mp[901][60]=true;
        mp[905][663]=true;
        mp[905][616]=true;
        mp[905][777]=true;
        mp[905][464]=true;
        mp[925][756]=true;
        mp[925][533]=true;
        mp[925][924]=true;
        mp[925][43]=true;
        mp[929][920]=true;
        mp[929][129]=true;
        mp[937][912]=true;
        mp[937][215]=true;
        mp[941][741]=true;
        mp[941][580]=true;
        mp[949][851]=true;
        mp[949][420]=true;
        mp[949][900]=true;
        mp[949][301]=true;
        mp[953][728]=true;
        mp[953][615]=true;
        mp[965][884]=true;
        mp[965][387]=true;
        mp[965][957]=true;
        mp[965][124]=true;
        mp[977][945]=true;
        mp[977][248]=true;
        mp[985][697]=true;
        mp[985][696]=true;
        mp[985][864]=true;
        mp[985][473]=true;
        mp[997][925]=true;
        mp[997][372]=true;
    }
    
    struct node
    {
        int x,y,c,d,next,other;
    }a[410000];int len,last[110000];
    void ins(int x,int y,int c,int d)
    {
        int k1,k2;
        
        len++;k1=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++;k2=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;
        
        a[k1].other=k2;
        a[k2].other=k1;
    }
    
    int flow,mmax;
    int st,ed;
    int d[110000],list[110000];bool v[110000];
    int pos[110000],c[110000];
    bool bfs()
    {
        memset(d,63,sizeof(d));d[st]=0;
        memset(v,false,sizeof(v));v[st]=true;
        
        int head=1,tail=2;
        list[1]=st;pos[st]=0;c[st]=2147483647;
        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;
                    pos[y]=k;
                    c[y]=min(a[k].c,c[x]);
                    if(v[y]==false)
                    {
                        v[y]=true;
                        list[tail]=y;
                        tail++;if(tail==105000)tail=1;
                    }
                }
            }
            v[x]=false;
            head++;if(head==105000)head=1;
        }
        if(d[ed]>999999999)return false;
        else
        {
            flow+=c[ed];
            mmax+=d[ed]*c[ed];
            int y=ed;
            while(pos[y]!=0)
            {
                int k=pos[y];
                a[k].c-=c[ed];
                a[a[k].other].c+=c[ed];
                y=a[k].x;
            }
            return true;
        }
    }
    int main()
    {
        initmp();
        int L,R;
        scanf("%d%d",&L,&R);
        len=0;memset(last,0,sizeof(last));
        for(int i=L;i<=R;i++)
            for(int j=L;j<=R;j++)
                if(mp[i][j]==true||mp[j][i]==true)
                    ins((i-L+1),(j-L+1)+(R-L+1),1,-(i+j));
        st=(R-L+1)*2+1,ed=(R-L+1)*2+2;
        for(int i=L;i<=R;i++) ins(st,(i-L+1),1,0), ins((i-L+1)+(R-L+1),ed,1,0);
        //composition
        
        flow=0;mmax=0;
        while(bfs()==true);
        printf("%d %d
    ",flow/2,-mmax/2);
        return 0;
    }
  • 相关阅读:
    xgqfrms™, xgqfrms® : xgqfrms's offical website of GitHub!
    xgqfrms™, xgqfrms® : xgqfrms's offical website of GitHub!
    svn 启动项目报错,项目被lock
    BigDecimal 用法详解
    MySQL 规范
    Tomcat 详解URL请求
    Tomcat Servlet工作原理
    Tomcat Context容器和Wrapper容器
    Tomcat 核心组件 Container容器相关
    Tomcat 核心组件 Connector
  • 原文地址:https://www.cnblogs.com/AKCqhzdy/p/8478516.html
Copyright © 2020-2023  润新知