[BZOJ3275]Number解题报告|网络流

Description

有N个正整数,需要从中选出一些数,使这些数的和最大。
若两个数a,b同时满足以下条件,则a,b不能同时被选
1:存在正整数C,使a*a+b*b=c*c
2:gcd(a,b)=1

 

  这道题做出来还是比较有成就感的..毕竟是自己独立的思考过程

  首先可以对于选或不选,我们可以建立经典最小割模型,向s,t连容量为数值的边

  然而我们发现,发现两个数不能同时被选之后又不知道应该怎么办了

  在a,b之间连一条容量为正无穷的边?那不是强制让他们在同一边吗?

  起到了相反作用...然而我们很快想到了一道叫做圈地的题目

  我们是通过划分成二分图之后然后s,t连相反的边来解决的

  那么这道题也可以用这种方法吗?可以转化成二分图吗?

  当然可以。我们思考a^2+b^2=c^2这个式子

  当c为奇数的时候,a,b显然一奇一偶

  c为偶数的时候,a,b同奇或同偶

  然而实际上这两种情况都是不存在的...

  首先a,b同偶的话显然,不满足gcd(a,b)=1的要求

  如果他们同奇,我们假设a=2n+1,b=2m+1

  a^2+b^2=4n^2+4m^2+4n+4m+2

  模4的余数显然为2,但是如果c是偶数的话c^2显然是4的倍数

  然后这种情况也排除了

  因此a,b必然一奇一偶!

  然后就可以建立连边,然后用最小割求解啦!(撒花

  发现和黄学长的做法并不一样,但是后来去翻发现和Jry的做法是一样的 (继续撒花

 

 


 

  不放程序了,cnblogs贴代码的工具并不漂亮

  而且网络流不过是一些模板没什么好放的

 

  还是WA了好多发...就是弱啊...

 

  17/.Apr.

posted @ 2015-04-18 13:43  mjy0724  阅读(219)  评论(0编辑  收藏  举报