首页
Python
Java
IOS
Andorid
NodeJS
JavaScript
HTML5
【
bzoj3158&3275: 千钧一发(最小割)
】的更多相关文章
【BZOJ3158】千钧一发 最小割
[BZOJ3158]千钧一发 Description Input 第一行一个正整数N. 第二行共包括N个正整数,第 个正整数表示Ai. 第三行共包括N个正整数,第 个正整数表示Bi. Output 共一行,包括一个正整数,表示在合法的选择条件下,可以获得的能量值总和的最大值. Sample Input 4 3 4 5 12 9 8 30 9 Sample Output 39 题解:一开始直接把Number那道题粘了下来交上去,结果发现并不一样~ #include <cstdio> #inclu…
bzoj3158&3275: 千钧一发(最小割)
3158: 千钧一发 题目:传送门 题解: 这是一道很好的题啊...极力推荐 细看题目:要求一个最大价值,那么我们可以转换成求损失的价值最小 那很明显就是最小割的经典题目啊?! 但是这里两个子集的分化并不明显...GG 耐心一点,从题目的要求再入手: 对于第二个要求,如果两点的a值都为偶数,那么肯定满足 那如果两个数都为奇数的话,也必定满足要求一,证明如下: 1.一个奇数的平方%4为1,一个偶数的平方%4为0 2.两个奇数的平方和%4为2 3.如果两个奇数的平方和是一个奇数的平方,那么%4应该为…
【BZOJ-3275&3158】Number&千钧一发 最小割
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…
bzoj 3158 千钧一发 —— 最小割
题目:https://www.lydsy.com/JudgeOnline/problem.php?id=3158 \( a[i] \) 是奇数则满足条件1,是偶数则显然满足条件2: 因为如果把两个奇数的 \( a[i] \) 写成 \( 2*n+1 \) 和 \( 2*m+1 \),那么: \( a[i]^{2} + a[j]^{2} = (2*n+1)^{2} + (2*m+1)^{2} = 4*(n^{2}+n+m^{2}+m) + 2 \) 这是个偶数,所以如果它是完全平方数,那么一定是一…
BZOJ 3158 千钧一发 最小割
分析: 偶数对满足条件2,所有奇数对满足条件1. 如果你能一眼看出这个规律,这道题就完成了一半. 我们只需要将数分为两类,a值为奇数,就从S向这个点连容量为b值的边,a值为偶数,就从这个点向T连容量为b值的边. 暴力枚举,对于奇集合和偶集合中不能共存的两个数,连容量为无穷大的边. 求出最小割,代表这个割集要被我们舍弃. 然后直接用b值总和减去最小割就好. 代码: #include<bits/stdc++.h> #define ms(a,x) memset(a,x,sizeof(a)) #def…
BZOJ 3275: Number( 最小割 )
S->每个奇数,每个偶数->T各连一条边, 容量为这个数字.然后不能同时选的两个数连容量为+oo的边. 总数-最大流即是答案. 因为满足a2+b2=c2的a,b一定是一奇一偶或者两个偶数, 2偶不满足gcd=1, 所以两个数不能同时选一定是一奇一偶. --------------------------------------------------------------------- #include<bits/stdc++.h> using namespace std;…
BZOJ3158 千钧一发(最小割)
可以看做一些物品中某些互相排斥求最大价值.如果这是个二分图的话,就很容易用最小割了. 观察其给出的条件间是否有什么联系.如果两个数都是偶数,显然满足条件二:而若都是奇数,则满足条件一,因为式子列出来发现一定不能写成完全平方数.那么这就是个二分图了. #include<iostream> #include<cstdio> #include<cmath> #include<cstdlib> #include<cstring> #include<…
bzoj 3158 千钧一发(最小割)
3158: 千钧一发 Time Limit: 10 Sec Memory Limit: 512 MBSubmit: 767 Solved: 290[Submit][Status][Discuss] Description Input 第一行一个正整数N. 第二行共包括N个正整数,第 个正整数表示Ai. 第三行共包括N个正整数,第 个正整数表示Bi. Output 共一行,包括一个正整数,表示在合法的选择条件下,可以获得的能量值总和的最大值. Sample Input 4 3 4 5 12…
bzoj 3275 Number(最小割)
[题意] 给定n个数,要求选出一些数满足 1.存在c,a*a+b*b=c*c 2.gcd(a,b)=1 使得和最大. [思路] 二分图的最大权独立集(可以这么叫么QAQ 先拆点,对于不满足条件的两个点,连边(u,v’,inf),(v,u’,inf),另外连边(S,u,a[u]),(u,T,a[u]). 求出的最小割为最小亏损的2倍. [代码] #include<set> #include<cmath> #include<queue> #include<vecto…
bzoj 3158: 千钧一发【最小割】
这个条件非常妙啊,奇数和奇数一定满足1,因为\( (2a+1)^2+(2b+1)^2=4a^2+4a+4b^2+4b+2=2(2(a^2+a+b^2+b)+1) \)里面这个一定不是平方数因为除二后是个奇数不能再分一个2出来:偶数和偶数一定满足2,因为gcd>=2 考虑最小割,先加上所有收益然后求割之后满足条件的最小代价 所以对于a[i]&1,连接(s,i,b[i]),否则连接(i,t,b[i]),对于不能同时选的i,j来说,连(i,j),表示要么割掉i的收益要么割掉j的收益 #includ…