Uva live 4043 Ants( KM+简单的计算几何)
来源:互联网 发布:淘宝网魔豆妈妈 编辑:程序博客网 时间:2024/06/10 02:15
一定要清楚的一个问题,就是:(如图)两条黑色的线的和一定小于蓝色的和,但是平方的和之间就不一定是这个关系了!
代码:
#include <cstdio>#include <cstring>#include <algorithm>#include <iostream>#include <cmath>using namespace std;const double INF = 0x7fffffff;const double eps = 1e-9;const int N = 110;int n;double w[N][N], lx[N], ly[N];int l[N], r[N];int wx[N], wy[N], bx[N], by[N];bool S[N], T[N];bool eq( double x, double y ) { return fabs ( x - y ) < eps;}bool match( int i ){ S[i] = true; for ( int j = 1; j <= n; ++j ) if ( eq( lx[i] + ly[j], w[i][j] ) && !T[j] ) { T[j] = true; if ( !l[j] || match(l[j]) ) { l[j] = i; //r[i] = j; return true; } } return false;}void update(){ double a = INF; for ( int i = 1; i <= n; ++i ) if ( S[i] ) for ( int j = 1; j <= n; ++j ) if ( !T[j] ) a = min( a, lx[i]+ly[j]-w[i][j] ); for ( int i = 1; i <= n; ++i ) { if ( S[i] ) lx[i] -= a; if ( T[i] ) ly[i] += a; }}void KM(){ //memset(l, 0, sizeof(l)); //memset(r, 0, sizeof(r)); for ( int i = 1; i <= n; ++i ) { l[i] = lx[i] = ly[i] = 0; for ( int j = 1; j <= n; ++j ) lx[i] = max( lx[i], w[i][j] ); } for ( int i = 1; i <= n; ++i ) { for(;;) { for ( int j = 1; j <= n; ++j ) S[j] = T[j] = 0; if ( match(i) ) break; else update(); } }}int main(){ bool first = false; while ( scanf("%d", &n) != EOF ) { if ( first ) printf("\n"); first = true; for ( int i = 1; i <= n; ++i ) scanf("%d%d", &wx[i], &wy[i]); for ( int i = 1; i <= n; ++i ) scanf("%d%d", &bx[i], &by[i]); for ( int i = 1; i <= n; ++i ) for ( int j = 1; j <= n; ++j ) w[j][i] = -sqrt((double)(wx[i]-bx[j])*(wx[i]-bx[j])+(double)(wy[i]-by[j])*(wy[i]-by[j])); KM(); for ( int i = 1; i <= n; ++i ) printf("%d\n", l[i]); }}
- Uva live 4043 Ants( KM+简单的计算几何)
- POJ 3565 Ants(计算几何,KM)
- UVa 1411 Ants(KM)
- UVa:1411 Ants(KM算法)
- uva 1411 - Ants(几何+完美匹配)
- [BZOJ2539][Ctsc2000]丘比特的烦恼(KM+计算几何)
- POJ 3565 Ants(匹配? 计算几何!)
- uva 1411 Ants (权值和最小的完美匹配---KM算法)
- poj3565 ants(KM)
- poj3565 Ants(KM)
- UVA 12709 Falling Ants(简单的比较大小)
- UVA 11178 - Morley's Theorem 简单的计算几何
- POJ 1264 UVA 109 简单的计算几何
- 【UVALive】4043 Ants KM匹配
- UVALive - 4043 Ants (KM裸题)
- POJ 3565 Ants (KM)
- UVA - 10250 - The Other Two Trees (简单计算几何)
- poj 3565 Ants(计算几何调整思想)
- 读书笔记
- 浅谈编程语言的类型系统
- Windows下开始PHP SOAP
- 百度收录的规律
- 颠倒的价牌
- Uva live 4043 Ants( KM+简单的计算几何)
- day7 test04
- Ksoap2+WebService+BaseAdapter 实现android对WebService的调用
- ANDRIOD提示R变量未定义,资源文件不存在问题
- 关于 ListView 调用 notifyDataSetChanged 不刷新的问题
- 【Windows XP系统隐形密码如何设置】
- Slice语法
- Opencv-2.0.0的ARM移植和使用(Ubuntu10.04 / OK6410开发板 / linux3.01)
- jFinal+AngularJs未来javaEE开发的趋势——程序员的福音