HDU3359 Special Fish (KM匹配)
来源:互联网 发布:免费网络拍卖平台 编辑:程序博客网 时间:2024/05/21 17:53
题意:告诉任意两个鱼之间的关系,然后,两条有关系的鱼的权值异或就是 spawn的值,求所有spawn和的最大值。
思路:预处理好任意两条鱼的spawn的值,KM匹配一下即可。
#include<cstdio>#include<iostream>#include<algorithm>#include<cmath>#include<set>#include<map>#include<string>#include<cstring>#include<stack>#include<queue>#include<vector>#include<cstdlib>#define lson (rt<<1),L,M#define rson (rt<<1|1),M+1,R#define M ((L+R)>>1)#define cl(a,b) memset(a,b,sizeof(a));#define LL long long#define P pair<int,int>#define X first#define Y second#define pb push_back#define fread(zcc) freopen(zcc,"r",stdin)#define fwrite(zcc) freopen(zcc,"w",stdout)using namespace std;const int maxn=105;const int inf=999999999;int w[maxn][maxn];int linker[maxn],lx[maxn],ly[maxn],slack[maxn];bool visx[maxn],visy[maxn];int nx,ny;bool dfs(int x){ visx[x]=true; for(int y=0;y<ny;y++){ if(visy[y])continue; int tmp=lx[x]+ly[y]-w[x][y]; if(tmp==0){ visy[y]=true; if(linker[y]==-1||dfs(linker[y])){ linker[y]=x; return true; } }else if(slack[y]>tmp){ slack[y]=tmp; } } return false;}int km(){ cl(linker,-1); cl(ly,0); for(int i=0;i<nx;i++){ lx[i]=-inf; for(int j=0;j<ny;j++)if(w[i][j]>lx[i]){ lx[i]=w[i][j]; } } for(int x=0;x<nx;x++){ fill(slack,slack+ny+1,inf); while(true){ cl(visx,false); cl(visy,false); if(dfs(x))break; int d=inf; for(int i=0;i<ny;i++)if(!visy[i]&&slack[i]<d){ d=slack[i]; } for(int i=0;i<nx;i++)if(visx[i]){ lx[i]-=d; } for(int i=0;i<ny;i++)if(visy[i])ly[i]+=d; else slack[i]-=d; } } int ans=0; for(int i=0;i<ny;i++)if(linker[i]!=-1){ ans+=w[linker[i]][i]; } return ans;}int a[maxn];char s[maxn][maxn];int main(){ int n; while(scanf("%d",&n)&&n){ for(int i=0;i<n;i++){ scanf("%d",&a[i]); } for(int i=0;i<n;i++){ for(int j=0;j<n;j++){ w[i][j]=a[i]^a[j]; } } for(int i=0;i<n;i++){ scanf("%s",s[i]); for(int j=0;j<n;j++){ if(s[i][j]=='0'){ w[i][j]=0; } } } nx=ny=n; printf("%d\n",km()); } return 0;}
0 0
- HDU3359 Special Fish (KM匹配)
- 【HDU】 3395 Special Fish 费用流(可KM匹配)
- HDU 3995 Special Fish(KM最大匹配)
- hdu3395 Special Fish(KM)
- HDU 3395 Special Fish(KM)
- hdu3395 Special Fish (KM)
- [ACM] HDU 3395 Special Fish (二分图最大权匹配,KM算法)
- hdu 3395 Special Fish(费用流//KM匹配)
- HDU 3395 Special Fish KM水题
- HDU 3395 Special Fish(KM算法)
- HDU 3395 Special Fish?费用流(虚拟边)?647★KM(加虚拟边权)
- HDU 3395 Special Fish KM算法+邻接矩阵建图
- hdu(3395)Special Fish
- HDU 3395 Special Fish 二分匹配(求最大匹配值)
- HDU 3395Special Fish(二分图的最大权匹配)
- hdu 3395 Special Fish(异或,最大费用任意流,最优匹配)
- hdu 3395 Special Fish 带权匹配 费用流
- HDU 3395 Special Fish(二分图中最优匹配)
- (null): Linker command failed with exit code 1 (use -v to see invocation)
- 64位Win8环境的Python数值分析库安装(原创)
- Windows下PostGIS的安装
- Postgres-XC/XL/X2分布式数据库安装
- hdoj 1575 Tr A 【矩阵快速幂】
- HDU3359 Special Fish (KM匹配)
- 03_java数组和冒泡排序
- 绝对路径 与 相对路径
- 设计模式,手势识别器
- is marked as crashed and should be repaired mysql 数据库 报的这个错误 怎么解决么
- JAVA字符串格式化-String.format()的使用
- 2016阿里巴巴java笔试题
- 用批处理修改IE代理服务器
- class和struct 的区别?