Gym - 101490J-思维|网络流|匈牙利-Programming Tutors
2017-09-24 20:03
344 查看
https://vjudge.net/problem/Gym-101490J
写法好多。网络流和匈牙利也得补了。
给定2*m个点,问你求 1-m 为老师,m+1-2*m为学生。
给你他们的 二维坐标,让他们两两匹配,问你他们之间距离最大值的最小值。
思路:先以老师为主,存一张二维表,然后排和每个老师 和最近学生的距离,放到一个vector里,排序,这些距离从小到大找,把用过的学生标记掉。
但是这样结果可能是错的,再以学生为主体,来一遍,求最小值。
竟然是1a 好开心qwq。实验室的说数据水。不过我感觉强弱这样都是可以得qwq
图论还是too young。匈牙利只会 最大匹配那种qwq。还是不太会qwq
写法好多。网络流和匈牙利也得补了。
给定2*m个点,问你求 1-m 为老师,m+1-2*m为学生。
给你他们的 二维坐标,让他们两两匹配,问你他们之间距离最大值的最小值。
思路:先以老师为主,存一张二维表,然后排和每个老师 和最近学生的距离,放到一个vector里,排序,这些距离从小到大找,把用过的学生标记掉。
但是这样结果可能是错的,再以学生为主体,来一遍,求最小值。
竟然是1a 好开心qwq。实验室的说数据水。不过我感觉强弱这样都是可以得qwq
图论还是too young。匈牙利只会 最大匹配那种qwq。还是不太会qwq
#include <bits/stdc++.h> using namespace std; /* */ struct Node { int num,colu; }; const int maxn=1e5; vector<Node >a[maxn];//记录值 bool col[maxn];//记录已经用过的列标 bool cmp2(Node a,Node b){ return a.num<b.num; } bool cmp3(pair<int,int> a,pair<int,int> b){ return a.first<b.first; } int m; int solve(){ vector<pair<int,int> >q; memset(col,false,sizeof(col)); q.clear(); //q.resize(200); for(int i=1;i<=m;i++){ sort(a[i].begin(),a[i].end(),cmp2); q.push_back(make_pair(a[i][0].num,i)); } sort(q.begin(),q.end(),cmp3); int ans=-1; for(int i=0;i<q.size();i++){ int bh=q[i].second; int cc=1; while(col[a[bh][cc].colu]) cc++; ans=max(a[bh][cc].num,ans); //cout<<ans<<"!!!!!!!!!!"<<bh<<" "<<cc<<endl; col[a[bh][cc].colu]=true; } return ans; } int main() { int a1,b1; vector<pair<int,int> >q; while(~scanf("%d",&m)){ int ans=3e8+200; q.resize(m*2+100); q.push_back(make_pair(0,0)); for(int i=0;i<=m;i++) a[i].resize(m+1); for(int i=0;i<2*m;i++){ scanf("%d%d",&a1,&b1); q[i+1]=(make_pair(a1,b1)); } for(int i=1;i<=m;i++){ for(int j=m+1;j<=m*2;j++){ a[i][j-m].num=abs(q[i].first-q[j].first)+abs(q[i].second-q[j].second); a[i][j-m].colu=j-m; } } ans=min(solve(),ans); for(int i=1+m;i<=m*2;i++){ for(int j=1;j<=m;j++){ a[i-m][j].num=abs(q[i].first-q[j].first)+abs(q[i].second-q[j].second); a[i-m][j].colu=j; //a[i-m][j]=Node(abs(q[i].first-q[j].first)+abs(q[i].second-q[i].second),j); } } ans=min(ans,solve()); printf("%d\n",ans); } return 0; }
相关文章推荐
- Gym - 100204G Network Wars 网络流相关定理 附一组数据
- 【思维】Cupcakes Gym - 101243E
- codevs 1922 骑士共存问题||二分图||最大独立集||二分图匹配||Dinic与匈牙利算法的讨论||网络流
- Gym 101615C 【数学思维】
- GYM 101128 C.Canvas Painting【思维+优先队列】
- UVa11419 - SAM I AM(匈牙利算法/网络流【方案问题)
- Gym - 101572D Distinctive Character bfs + 思维 好题
- Codeforces gym 101341I Matrix God【思维】【hash】
- GYM 101128 A.Promotions【思维+暴力】
- Gym 101128F Sheldon Numbers(网络流)
- 二分图最大匹配 网络流&匈牙利
- GYM - 100812G Short Path (SPFA+思维)
- 【思维 && 几何】Gym - 101063K Dire, Dire Docks
- Gym-101484H Eating Pie [网络流最小割]
- 思维题 Gym 100553A Alter Board
- Gym 101142C CodeCoder vs TopForces【思维+Dfs】
- GYM - 100812A Tale of Debt (思维好题)
- Gym 100247B Similar Strings(哈希+思维)
- Gym 101142G Gangsters in Central City【思维+Lca】
- Gym - 101572B-水题&思维漏洞&排序相关-B - Best Relay Team