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+过了(我机子居然比评测机快?不敢相信)
不过只知道是个二分然后自己写出来的感觉好棒(虽然在知道上下界的情况下,不过上下界可以本机跑嘛,或者打个表直接跑费用流也行(滑稽))