网络流24题做题记录(更新中)

1,飞行员配对

裸的最大二分图匹配

2,太空飞行计划

我的最大权闭合子图入门题

注意这个读入很gg,如果是利用getchar后一个数这样子来输入的话需要判是否是EOF(因为文件末尾很可能没有换行,就会T掉),另外多输出文末回车会WA。
读入代码示例

for(int i=1,vex;i<=m;++i){
        scanf("%d",v+i);sum+=v[i];
        while(1){
            ch=getchar();
            if(ch==-1||ch=='\r'||ch=='\n') break;
            scanf("%d",&vex);
            add_edge(i,m+vex,INF);
        }
    }

3.魔术球

这题一开始没想出来,杯哥告诉我二分之后做出来了(然而做法十分拙劣)
我是这么想的,check是否可行的时候

加三个虚拟节点s,S,t
s->S连容量为n(输入的n)的边表示有n个柱子
每个代表数的点a拆为 a1,a2 , 连 a1>a2 容量为1的边,经过这条边表示装了a这个球,然后一开始S往所有a连一条容量为1的边,另外就是装完a之后考虑后面装哪个,如果i+j是完全平方数,那么连 ai2>aj1 ,表示之后还可以装,然后连所有的 ai2>t 表示装了这个就不再装数。

然后可以发现明显的是 a1>a2 的边需要满流,上下界?太麻烦了,改成费用流,对于 a1>a2 的边费用为-1,用来引流,别的费用为0,可以看出最大流一定为n,只要此时的最小费用=-n则当前答案可行

输出路径就沿着flow>=1的边走,打标记就好了

然后答案的上下界是1~1600听杯哥说直接枚举也能过,可是我算法拙劣,二分还得卡常数。。。最开始用stl的队列,n=55跑了2s,然后改成手写队列,0.8s左右(woc好快啊),然而洛谷上还是T,没办法了加了slf优化之后就0.58s了,然后洛谷0.7s+过了(我机子居然比评测机快?不敢相信)

不过只知道是个二分然后自己写出来的感觉好棒(虽然在知道上下界的情况下,不过上下界可以本机跑嘛,或者打个表直接跑费用流也行(滑稽))

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值