poj 3565——Ants
来源:互联网 发布:九仙图坐骑进阶数据 编辑:程序博客网 时间:2024/04/29 19:31
题意:给出蚂蚁和树的坐标,求蚂蚁和树距离最小的匹配
思路:KM算法
错误:最开始用的long long,错了,后来改成double就对了,如果在算距离的时候不开平方也会错,不知道为什么……
代码如下:
#include<iostream>#include<cstring>#include<cstdio>#include<vector>#include<cmath>#define CLR(a,b) memset(a,b,sizeof(a));using namespace std;const int maxn=105;typedef long long ll;struct Point{ double x; double y;};Point ant[105];Point tree[105];double W[105][105];double Lx[maxn],Ly[maxn];int leftt[maxn];bool S[maxn],T[maxn];int n;int dcmp(double x){ if(abs(x)<=1e-6)return 0; return x<0?-1:1;}bool match(int i){ S[i]=true; for(int j=1;j<=n;++j) { if(!T[j]&&dcmp(Lx[i]+Ly[j]-W[i][j])==0) { T[j]=true; if(!leftt[j]||match(leftt[j])) { leftt[j]=i; return true; } } } return false;}void update(){ double a=2e10; for(int i=1;i<=n;++i) { if(S[i]) { for(int j=1;j<=n;++j) { if(!T[j]) { a=min(a,W[i][j]-Lx[i]-Ly[j]); } } } } for(int i=1;i<=n;++i) { if(S[i])Lx[i]+=a; if(T[i])Ly[i]-=a; }}void KM(){ for(int i=1;i<=n;++i) { leftt[i]=0; Lx[i]=Ly[i]=0; } 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(){ // freopen("data.txt","r",stdin); scanf("%d",&n); for(int i=1;i<=n;++i) { scanf("%lf%lf",&tree[i].x,&tree[i].y); } for(int i=1;i<=n;++i) { scanf("%lf%lf",&ant[i].x,&ant[i].y); } for(int i=1;i<=n;++i) { for(int j=1;j<=n;++j) { W[i][j]=sqrt((ant[i].x-tree[j].x)*(ant[i].x-tree[j].x)+(ant[i].y-tree[j].y)*(ant[i].y-tree[j].y)); // cout<<W[i][j]<<' '; } // cout<<endl; } KM(); for(int i=1;i<=n;++i) { printf("%d\n",leftt[i]); } return 0;}
0 0
- poj 3565——Ants
- Poj 1852——Ants
- POJ ——1852 Ants
- 刷题——Ants POJ
- POJ 3565 Ants
- poj 3565 Ants KM
- POJ 3565 Ants
- POJ 3565 - Ants
- POJ 3565 Ants
- Ants - POJ 3565 KM算法
- POJ 3565 Ants (KM)
- poj 3565 Ants KM算法
- Ants POJ - 3565 (神题)
- POJ—1852—Ants—【入门题】【想法题】
- POJ Ants
- [POJ]Ants
- POJ Ants
- Ants POJ
- UVA10487
- 最快速的Android开发环境搭建ADT-Bundle及Hello World
- html5 ValidityState
- Create a JMS Configuration on Oracle Weblogic 11g using WSLT
- POJ 2976,3111 01分数规划
- poj 3565——Ants
- Android Bundle详解
- N2 语法出题倾向对策
- 希尔排序
- GDB 命令详细解释
- 过去与现在的IOC
- DotNetReactor使用.net代码混淆工具
- Pro Android学习笔记(一二十):Telephony API(2):接收短信
- Search Insert Position