bzoj 3275 最小割

本文探讨了一个利用拟阵和二分图解决选择问题的数学难题,特别关注了直角三角形斜边为整数且直角边为奇数的条件是否成立。通过证明,作者揭示了此类直角三角形不存在的数学原理,并通过代码实现了解决方案,最终计算出最大价值集合。

 

给你一堆东西,叫你选一些东西出来,使得价值最大,要求选出的东西集合中的任意a,b满足性质p。

可以考虑:

  1、拟阵?

  2、二分图?

这道题由于数学硬伤,不知道不存在两条直角边是奇数,斜边是整数的直角三角形。

证明是:

  对于奇数a: a*a = 1 mod 4

  对于偶数a: a*a = 0 mod 4

  所以对于两个奇数a,b: a*a+b*b = 2 mod 4

  不存在整数c使得: a*a+b*b = c*c mod 4

 

  1 /**************************************************************
  2     Problem: 3275
  3     User: idy002
  4     Language: C++
  5     Result: Accepted
  6     Time:3616 ms
  7     Memory:1176 kb
  8 ****************************************************************/
  9  
 10 #include <cstdio>
 11 #include <cmath>
 12 #include <cstring>
 13 #include <vector>
 14 #define min(a,b) ((a)<(b)?(a):(b))
 15 #define oo 0x3f3f3f3f
 16 #define N 6010
 17 using namespace std;
 18  
 19 typedef long long dnt;
 20 struct Edge {
 21     int u, v, f;
 22     Edge( int u, int v, int f ):u(u),v(v),f(f){}
 23 };
 24 struct Dinic {
 25     int src, dst;
 26     vector<Edge> edge;
 27     vector<int> g[N];
 28     int dep[N], cur[N], qu[N], bg, ed;
 29     void init( int src, int dst ) {
 30         this->src = src;
 31         this->dst = dst;
 32     }
 33     void adde( int u, int v, int f ) {
 34         g[u].push_back( edge.size() );
 35         edge.push_back( Edge(u,v,f) );
 36         g[v].push_back( edge.size() );
 37         edge.push_back( Edge(v,u,0) );
 38     }
 39     bool bfs() {
 40         memset( dep, 0, sizeof(dep) );
 41         qu[bg=ed=1] = src;
 42         dep[src] = 1;
 43         while( bg<=ed ) {
 44             int u=qu[bg++];
 45             for( int t=0; t<g[u].size(); t++ ) {
 46                 Edge &e = edge[g[u][t]];
 47                 if( e.f && !dep[e.v] ) {
 48                     dep[e.v] = dep[e.u] + 1;
 49                     qu[++ed] = e.v;
 50                 }
 51             }
 52         }
 53         return dep[dst];
 54     }
 55     int dfs( int u, int a ) {
 56         if( u==dst || a==0 ) return a;
 57         int remain=a, past=0, na;
 58         for( int &t=cur[u]; t<g[u].size(); t++ ) {
 59             Edge &e=edge[g[u][t]];
 60             Edge &ve=edge[g[u][t]^1];
 61             if( e.f && dep[e.v]==dep[e.u]+1 && (na=dfs(e.v,min(remain,e.f))) ) {
 62                 remain -= na;
 63                 past += na;
 64                 e.f -= na;
 65                 ve.f += na;
 66                 if( !remain ) break;
 67             }
 68         }
 69         return past;
 70     }
 71     int maxflow() {
 72         int rt=0;
 73         while( bfs() ) {
 74             memset( cur, 0, sizeof(cur) );
 75             rt += dfs(src,oo);
 76         }
 77         return rt;
 78     }
 79 }D;
 80  
 81 int n; 
 82 int src, dst;
 83 int aa[N], sum;
 84 int gcd( int a, int b ) {
 85     return b ? gcd(b,a%b) : a;
 86 }
 87 bool ok( int a, int b ) {
 88     if( gcd(a,b)!=1 ) return false;
 89     dnt cc = (dnt)a*a + (dnt)b*b;
 90     dnt c = (dnt)sqrt(cc);
 91     if( c*c!=cc && (c+1)*(c+1)!=cc ) return false;
 92     return true;
 93 }
 94 int main() {
 95     scanf( "%d", &n );
 96     src = n+1, dst = n+2;
 97     D.init( src, dst );
 98     for( int i=1; i<=n; i++ ) {
 99         scanf( "%d", aa+i );
100         sum += aa[i];
101         if( aa[i]&1 ) 
102             D.adde( src, i, aa[i] );
103         else
104             D.adde( i, dst, aa[i] );
105     }
106     for( int i=1; i<=n; i++ ) {
107         if( !(aa[i]&1) ) continue;
108         for( int j=1; j<=n; j++ ) {
109             if( aa[j]&1 ) continue;
110             if( !ok(aa[i],aa[j]) ) continue;
111             D.adde( i, j, oo );
112         }
113     }
114     printf( "%d\n", sum-D.maxflow() );
115 }
View Code

 

转载于:https://www.cnblogs.com/idy002/p/4526388.html

标题基于Python的自主学习系统后端设计与实现AI更换标题第1章引言介绍自主学习系统的研究背景、意义、现状以及本文的研究方法和创新点。1.1研究背景与意义阐述自主学习系统在教育技术领域的重要性和应用价值。1.2国内外研究现状分析国内外在自主学习系统后端技术方面的研究进展。1.3研究方法与创新点概述本文采用Python技术栈的设计方法和系统创新点。第2章相关理论与技术总结自主学习系统后端开发的相关理论和技术基础。2.1自主学习系统理论阐述自主学习系统的定义、特征和理论基础。2.2Python后端技术栈介绍DjangoFlask等Python后端框架及其适用场景。2.3数据库技术讨论关系型和非关系型数据库在系统中的应用方案。第3章系统设计与实现详细介绍自主学习系统后端的设计方案和实现过程。3.1系统架构设计提出基于微服务的系统架构设计方案。3.2核心模块设计详细说明用户管理、学习资源管理、进度跟踪等核心模块设计。3.3关键技术实现阐述个性化推荐算法、学习行为分析等关键技术的实现。第4章系统测试与评估对系统进行功能测试和性能评估。4.1测试环境与方法介绍测试环境配置和采用的测试方法。4.2功能测试结果展示各功能模块的测试结果和问题修复情况。4.3性能评估分析分析系统在高并发等场景下的性能表现。第5章结论与展望总结研究成果并提出未来改进方向。5.1研究结论概括系统设计的主要成果和技术创新。5.2未来展望指出系统局限性并提出后续优化方向。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值