bzoj3275】的更多相关文章

3275: Number Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 748  Solved: 316[Submit][Status][Discuss] Description 有N个正整数,需要从中选出一些数,使这些数的和最大.若两个数a,b同时满足以下条件,则a,b不能同时被选1:存在正整数C,使a*a+b*b=c*c2:gcd(a,b)=1 Input 第一行一个正整数n,表示数的个数. 第二行n个正整数a1,a2,?an. Output…
[BZOJ3275]Number Description 有N个正整数,需要从中选出一些数,使这些数的和最大.若两个数a,b同时满足以下条件,则a,b不能同时被选1:存在正整数C,使a*a+b*b=c*c2:gcd(a,b)=1 Input 第一行一个正整数n,表示数的个数. 第二行n个正整数a1,a2,?an. Output 最大的和. Sample Input 5 3 4 5 6 7 Sample Output 22 HINT n<=3000. 题解:先是无脑码了个最小割,果断WA了,看网上…
最小割...然后推一下可知不能的情况必定为一奇一偶,于是s->奇->偶->t.跑最小割即可. #include<cstdio> #include<cstring> #include<iostream> #include<cmath> #include<algorithm> using namespace std; #define rep(i,n) for(int i=1;i<=n;i++) #define clr(x,c)…
容易想到是最小割(最大权独立集)然后每个数拆成两个点,不能同时选的之间连边跑最小割,最后答案=总数-mincut/2 因为这样建图将流量变成了原来的两倍 当然这道题更好的建图方法是分成奇数和偶数两个集合不难发现,奇数和奇数,偶数和偶数之间显然不能同时满足条件的所以这样直接ans=总点数-mincut ; type node=record point,flow,next:longint; end; ..] of node; a,p,cur,pre,d,numh,h:..] of longint;…
Description 有N个正整数,需要从中选出一些数,使这些数的和最大. 若两个数a,b同时满足以下条件,则a,b不能同时被选 1:存在正整数C,使a*a+b*b=c*c 2:gcd(a,b)=1 Input 第一行一个正整数n,表示数的个数. 第二行n个正整数a1,a2,?an. Output 最大的和. Sample Input 5 3 4 5 6 7 Sample Output 22 HINT n<=3000. Source 网络流 Solution 所以这道题a的数据范围是什么...…
Description 有N个正整数,需要从中选出一些数,使这些数的和最大.若两个数a,b同时满足以下条件,则a,b不能同时被选1:存在正整数C,使a*a+b*b=c*c2:gcd(a,b)=1 这道题做出来还是比较有成就感的..毕竟是自己独立的思考过程 首先可以对于选或不选,我们可以建立经典最小割模型,向s,t连容量为数值的边 然而我们发现,发现两个数不能同时被选之后又不知道应该怎么办了 在a,b之间连一条容量为正无穷的边?那不是强制让他们在同一边吗? 起到了相反作用...然而我们很快想到了一…
每个点拆点,分别向源/汇连a[i]的边,满足条件的相互连INF的边,答案为sum-maxflow*2. 因为若有几个点不能同时被选,我们要贪心地选择其中和尽量大的部分,这可以由最小割来保证. #include<cstdio> #include<cstring> #include<algorithm> #include<cmath> #include<queue> using namespace std; #define INF 214748364…
有N个正整数,需要从中选出一些数,使这些数的和最大. 若两个数a,b同时满足以下条件,则a,b不能同时被选 1:存在正整数C,使a*a+b*b=c*c 2:gcd(a,b)=1 Sample Output22 Input 第一行一个正整数n,表示数的个数.n<=3000 第二行n个正整数a1,a2,...an Output 最大的和 Sample Input5 3 4 5 6 7   首先可以发现,只有奇数和偶数才可能满足上面两个条件: 那么我们把序列分为奇偶两部分: 设源点st,汇点ed; s…
3275: Number 题目:传送门 题解: 双倍经验@bzoj3158 代码: #include<cstdio> #include<cstring> #include<cstdlib> #include<cmath> #include<algorithm> #define qread(x) x=read() using namespace std; ; int n,st,ed,sum; ],B[]; struct node { int x,y…
二分图基础: 最大匹配:匈牙利算法 最小点覆盖=最大匹配 最小边覆盖=总节点数-最大匹配 最大独立集=点数-最大匹配 网络流: 技巧: 1.拆点为边,即一个点有限制,可将其转化为边 BZOJ1066,BZOJ1305 2.考虑左右两部,即比如横竖.男女.比赛和人等. BZOJ1532 带下界网络流问题 ----------------------转自zyf-zyf ss和tt为附加源或者说超级源 1.无源汇上下界可行流 对于(u,v)有向边,上界为a,下界为b 构图方法为: (1) ss 到 v…