UVALive - 4043 Ants (二分图最大权匹配)
来源:互联网 发布:如何利用网络招聘 编辑:程序博客网 时间:2024/04/26 20:20
链接 : http://acm.hust.edu.cn/vjudge/problem/viewProblem.action?id=14347
大白P351
/*--------------------- #headfile--------------------*/#include <algorithm>#include <iostream>#include <sstream>#include <cstring>#include <cstdlib>#include <cassert>#include <cstdio>#include <vector>#include <cmath>#include <queue>#include <stack>#include <set>#include <map>/*----------------------#define----------------------*/#define DRII(X,Y) int (X),(Y);scanf("%d%d",&(X),&(Y))#define EXP 2.7182818284590452353602874713527#define CASET int _;cin>>_;while(_--)#define RII(X, Y) scanf("%d%d",&(X),&(Y))#define DRI(X) int (X);scanf("%d", &X)#define mem(a,b) memset(a,b,sizeof(a))#define rep(i,n) for(int i=0;i<n;i++)#define ALL(X) (X).begin(),(X).end()#define INFL 0x3f3f3f3f3f3f3f3fLL#define RI(X) scanf("%d",&(X))#define SZ(X) ((int)X.size())#define PDI pair<double,int>#define rson o<<1|1,m+1,r#define PII pair<int,int>#define MAX 0x3f3f3f3f#define lson o<<1,l,m#define MP make_pair#define PB push_back#define SE second#define FI firsttypedef long long ll;template<class T>T MUL(T x,T y,T P){T F1=0;while(y){if(y&1){F1+=x;if(F1<0||F1>=P)F1-=P;}x<<=1;if(x<0||x>=P)x-=P;y>>=1;}return F1;}template<class T>T POW(T x,T y,T P){T F1=1;x%=P;while(y){if(y&1)F1=MUL(F1,x,P);x=MUL(x,x,P);y>>=1;}return F1;}template<class T>T gcd(T x,T y){if(y==0)return x;T z;while(z=x%y)x=y,y=z;return y;}#define DRIII(X,Y,Z) int (X),(Y),(Z);scanf("%d%d%d",&(X),&(Y),&(Z))#define RIII(X,Y,Z) scanf("%d%d%d",&(X),&(Y),&(Z))const double pi = acos(-1.0);const double eps = 1e-6;const ll mod = 1000000007ll;const int M = 100005;const int N = 215;using namespace std;/*----------------------Main-------------------------*/int n, m;int mc[N];ll lx[N], ly[N], sk[N], w[N][N];int vx[N], vy[N];bool dfs(int x) { vx[x] = 1; for(int y = 1; y <= m; y++) { if(vy[y]) continue; ll tmp = lx[x] + ly[y] - w[x][y]; if(tmp == 0) { vy[y] = 1; if(mc[y] == -1 || dfs(mc[y])) { mc[y] = x; return 1; } } else sk[y] = min(sk[y], tmp); } return 0;}ll KM() { mem(mc, -1); mem(ly, 0); for(int i = 1; i <= n; i++) { lx[i] = -1e10; for(int j = 1; j <= m; j++) { lx[i] = max(lx[i], w[i][j]); } } for(int x = 1; x <= n; x++) { for(int i = 1; i <= m; i++) sk[i] = 1e10; while(1) { mem(vx, 0); mem(vy, 0); if(dfs(x)) break; ll d = 1e10; for(int i = 1; i <= m; i++) if(!vy[i]) d = min(d, sk[i]); for(int i = 1; i <= n; i++) if(vx[i]) lx[i] -= d; for(int i = 1; i <= m; i++) { if(vy[i]) ly[i] += d; else sk[i] -= d; } } }// ll res = 0;// for(int i = 1; i <= m; i++) {// if(mc[i] != -1) res += w[mc[i]][i];// }// return res;}ll sq(ll x) { return (ll)x * x; }ll cal(PII a, PII b) { return sq(a.FI - b.FI) + sq(a.SE - b.SE);}int ff = 0;void solve() { while(RI(n) != EOF) { if(ff) puts(""); ff = 1; vector<PII> a, b; for(int i = 1; i <= n; i++) { DRII(x, y); a.PB(MP(x, y)); } for(int i = 1; i <= n; i++) { DRII(x, y); b.PB(MP(x, y)); } m = n; for(int i = 0; i <= n; i++) for(int j = 0; j <= m; j++) w[i][j] = -1e10; for(int i = 0; i < n; i++) { for(int j = 0; j < m; j++) { w[i+1][j+1] = -cal(a[j], b[i]); } } KM(); for(int i = 1; i <= m; i++) { printf("%d\n", mc[i]); } }}int main() {// freopen("in.txt", "r", stdin);// freopen("out.txt", "w", stdout);// CASET solve(); return 0;}
0 0
- UVALive - 4043 Ants (二分图最大权匹配)
- UVALive 4043 Ants(最大权匹配)
- UVALive 4043 Ants(二分图最佳完美匹配、KM)
- UVALive 4043 Ants(二分图最佳完美匹配、KM)
- UVaLive 4043 Ants(二分图最佳完美匹配、KM)
- UVALive-5013 Similarity(二分图最大权匹配)
- CSU 1623 Inspectors(二分图最大权匹配 KM算法)(UVAlive 6879)
- 二分图 最佳匹配 最大权匹配
- 最大权二分匹配
- Tour(二分图最大权匹配)(网络流)
- KM算法(二分图最大权匹配)
- 奔小康赚大钱(hdu2255,二分图最大权匹配)
- 二分图最大权匹配(KM算法)
- 二分图最大权匹配(KM算法)
- POJ 2195(二分图最大权匹配)
- 奔小康赚大钱(二分图最大权匹配)
- 二分图最大权匹配(费用流做法)
- Kuhn-Munkres算法(二分图最大权匹配)
- POJ 1170 暴搜+dp剪枝优先队列+状压
- 利用.bat(批处理)来删除KEIL编译生成的无用文件
- 我在武汉新东方上过的8个老师
- python--有关函数的问题
- 黑马程序员——Java基础04(数组)
- UVALive - 4043 Ants (二分图最大权匹配)
- SDK学院--棱镜SDK:棱镜SDK 二次验证方案
- 『iOS/Obj-C』Note Of 8-day Obj-C/iOS foundation course
- JAVA基础——IO流知识点完整总结版
- 股票成交价格确定方法详解
- Unity3D面试题整合
- java,maven,svn,idea环境配置
- 排序算法总结
- SpringMVC返回页面数据