2016 青岛区域赛补题 B(模拟), G(费用流)

来源:互联网 发布:matlab软件官方下载 编辑:程序博客网 时间:2024/05/01 21:42

B: 就模拟下。
感觉自己不太熟悉这种代码。

#include<bits/stdc++.h>using namespace std;#define N 35int b[N],a[N];//int r[6][8]{    //1,2,22,24,12,11,19,17,    //3,4,21,23,10,9,19,17,    //2,4,16,14,12,10,8,6,    //1,3,5,7,9,11,13,15,    //5,6,21,22,14,13,17,18,    //7,8,23,24,14,13,19,20,//};int r[6][8]={        16,17,0,1,20,21,11,10,        18,19,2,3,22,23,9,8,        0,2,4,6,8,10,12,14,        1,3,5,7,9,11,13,15,        4,5,22,20,15,14,17,19,        6,7,23,21,13,12,16,18    };bool ok(){    for(int i=0;i<6;++i){        int t=b[i*4];        for(int j=1;j<4;++j){            if(b[i*4+j]!=t)return 0;        }    }    return 1;}bool solve(){    if(ok())return 1;    for(int i=0;i<6;++i){        for(int j=0;j<24;++j)b[j]=a[j];        for(int j=0;j<8;++j){            b[r[i][j]]=a[r[i][(j+2)%8]];        }        if(ok())return 1;    }    for(int i=0;i<6;++i){        for(int j=0;j<24;++j)b[j]=a[j];        for(int j=0;j<8;++j){            b[r[i][j]]=a[r[i][(j-2+8)%8]];        }        if(ok())return 1;    }    return 0;}int main(){    int T;scanf("%d",&T);    //for(int i=0;i<6;++i){        //for(int j=0;j<8;++j){            //r[i][j]--;        //}    //}    while(T--){        for(int i=0;i<24;++i){            scanf("%d",&a[i]);            b[i]=a[i];        }        if(solve())puts("YES");        else puts("NO");    }}

G:
这个去了对数之后的正负号转不过来。。。
参考:http://blog.csdn.net/xlzhang223/article/details/53260587

int main(){    int t;    scanf("%d",&t);    while(t--){        scanf("%d%d",&n,&m);        init(n+50);        for(int i=1;i<=n;i++){            scanf("%d%d",&a[i],&b[i]);            c[i]=a[i]-b[i];        }        int u,v,f;        double p;        for(int i=0;i<m;i++){            scanf("%d%d%d%lf",&u,&v,&f,&p);            p=-log2(1.0-p);            if(f>0) addedge(u,v,1,0.0);            if(f-1>0) addedge(u,v,f-1,p);        }        for(int i=1;i<=n;i++){            if(c[i]>0) addedge(0,i,c[i],0);            else if(c[i]<0) addedge(i,n+1,-c[i],0);        }        double ans=0;        minCostMaxflow(0,n+1,ans);        ans=pow(2,-ans);        printf("%.2f\n",1.0-ans);    }    return 0;}
阅读全文
0 0