UVA1411 Ants
想出的一道题竟然是原题QAQ
非常有趣的一个题
根据三角形两边之和大于第三边 所以相交的线段一定是比不相交的线段要长的
所以直接二分图构图 最小费用最大流即可
(我不管我不管我要把这个出到NOIP膜你赛)
代码如下。
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<cmath>
#include<queue>
#define inf 20021225
#define ll long long
#define db double
#define mxn 400
#define eps 1e-6
using namespace std;
struct edge{int to,lt,f,fr;db c;}e[mxn*mxn];
struct point{int x,y;}p[mxn];
int in[mxn],from[mxn],cnt=1,nn,s,t,n,m;
db dis[mxn],ans;bool vis[mxn];
void add(int x,int y,int f,db c)
{
e[++cnt].to=y;e[cnt].lt=in[x];e[cnt].f=f;e[cnt].fr=x;e[cnt].c=c;in[x]=cnt;
e[++cnt].to=x;e[cnt].lt=in[y];e[cnt].f=0;e[cnt].fr=y;e[cnt].c=-c;in[y]=cnt;
}
queue<int> que;
bool spfa()
{
for(int i=1;i<=nn;i++) dis[i]=inf,vis[i]=0;
vis[s]=1;dis[s]=0.0;que.push(s);
while(!que.empty())
{
int x=que.front();que.pop();vis[x]=0;
//printf("%d ",x);
for(int i=in[x];i;i=e[i].lt)
{
int y=e[i].to;
if(e[i].f&&dis[y]>dis[x]+e[i].c)
{
dis[y]=dis[x]+e[i].c;
from[y]=i;
if(!vis[y]) que.push(y),vis[y]=1;
}
}
}
//printf("%lf %lf\n",dis[t],inf+eps);
return dis[t]<inf-eps;
}
db flow()
{
int flow=inf;
for(int i=t;i!=s;i=e[from[i]].fr) flow=min(flow,e[from[i]].f);
for(int i=t;i!=s;i=e[from[i]].fr) e[from[i]].f-=flow,e[from[i]^1].f+=flow;
return flow*dis[t];
}
void dinic()
{
while(spfa()) ans+=flow();
}
db dist(point a,point b)
{
return sqrt((db)(a.x-b.x)*(a.x-b.x)+(db)(a.y-b.y)*(a.y-b.y));
}
int main()
{
while(scanf("%d",&n)!=EOF)
{
cnt=1;memset(in,0,sizeof(in));
s=n*2+1;t=s+1;nn=t;
for(int i=1;i<=2*n;i++) scanf("%d%d",&p[i].x,&p[i].y);
for(int i=1;i<=n;i++) add(s,i,1,0),add(i+n,t,1,0);
for(int i=1;i<=n;i++)
for(int j=1;j<=n;j++)
add(i,j+n,1,dist(p[i],p[j+n]));
dinic();
for(int i=1;i<=n;i++)
for(int j=in[i];j;j=e[j].lt)
if(!e[j].f)
{
printf("%d\n",e[j].to-n);
break;
}
}
return 0;
}
UVA1411 Ants的更多相关文章
- UVaLive4043 UVa1411 Ants 巨人与鬼
题意:给出平面上n个白点n个黑点,要求两两配对,且配对所连线段没有交点. 法一:暴力 随机一个初始方案,枚举任意两条线段如果有交点就改一下. 效率其实挺好的. 法二:二分图最佳完美匹配 显然没有交点的 ...
- 【题解】Luogu UVA1411 Ants
原题传送门 博客里对二分图匹配的详细介绍 这道题是带权二分图匹配 用的是KM算法 我们要知道一个定理:要使线段没有相交,要使距离总和最小 我们先把任意一对白点.黑点的距离算一下 然后运用KM算法 因为 ...
- 使用ANTS Performance Profiler&ANTS Memory Profiler工具分析IIS进程内存和CPU占用过高问题
一.前言 最近一段时间,网站经常出现两个问题: 1.内存占用率一点点增高,直到将服务器内存占满. 2.访问某个页面时,页面响应过慢,CPU居高不下. 初步判断内存一点点增多可能是因为有未释放的资源一直 ...
- poj1852 Ants ——想法题、水题
求最短时间和最长时间. 当两个蚂蚁相遇的时候,可以看做两个蚂蚁穿过,对结果没有影响.O(N)的复杂度 c++版: #include <cstdio> #define min(a, b) ( ...
- Uva10881 Piotr's Ants
蚂蚁相撞会各自回头.←可以等效成对穿而过,这样移动距离就很好算了. 末状态蚂蚁的顺序和初状态其实是相同的. 那么剩下的就是记录每只蚂蚁的标号,模拟即可. /*by SilverN*/ #include ...
- [ACM_模拟] UVA 10881 Piotr's Ants[蚂蚁移动 数组映射 排序技巧]
"One thing is for certain: there is no stopping them;the ants will soon be here. And I, for one ...
- .NET性能调优之一:ANTS Performance Profiler的使用
.NET性能调优系列文章 系列文章索引 .NET性能调优之一:ANTS Performance Profiler的使用 .NET性能调优之二:使用Visual Studio进行代码度量 .NET性能调 ...
- [CareerCup] 7.2 Ants on Polygon 多边形上的蚂蚁
7.2 There are three ants on different vertices of a triangle. What is the probability of collision ( ...
- Uva---10881 Piotr's Ants(蚂蚁)
Problem DPiotr's AntsTime Limit: 2 seconds "One thing is for certain: there is no stopping them ...
随机推荐
- 前端每日实战:47# 视频演示如何用纯 CSS 创作一个蝴蝶标本展示框
效果预览 按下右侧的"点击预览"按钮可以在当前页面预览,点击链接可以全屏预览. https://codepen.io/comehope/pen/xzgZzQ 可交互视频教程 此视频 ...
- shell中的双引号和单引号
参考链接:http://bbs.chinaunix.net/thread-2076396-1-1.html " "(双引号)与 ' '(单引号)的区别 你在shell prompt ...
- 明明不太合适但是还是被用在配置文件和数据传输上的XML
XML概述: 概念: 可扩展的标记语言. 功能: 作为数据本地存储的格式.(已淘汰)作为结构化存储的方式,不如数据库效率高.目前一部分移动设备中还在使用. 作为网络中传输数据的格式.(已淘汰)作为网络 ...
- SQL Server 创建表
SQL Server 创建表 我们在上一节中完成了数据库的创建,在本节,我们要往这个新的数据库中加入点数据,要想将数据添加到数据库,我们就必须在数据库中添加一个表,接下来来看看具体的操作. 我们的数据 ...
- 《DNS稳定保障系列3--快如闪电,域名解析秒级生效》
在刚刚过去的双十一,又是一个全民狂欢的盛宴,天猫双十一的成交量高达2684亿.无数小伙伴在淘宝.天猫里买买买,今年你又剁手了多少?言归正传,在你疯狂秒杀的时候,有没有发现,今年的购物体验一如既往的好, ...
- Apache搭建http网站服务器入门教程
Apache搭建http网站服务器入门教程 准备工具 一台带有Linux系统的主机,这里使用CentOS 7.1 64位系统 一个备案过的域名,这里使用www.hellopage.cn 一台可以访问网 ...
- [CSP-S模拟测试]:marshland(最大费用可行流)
题目描述 前方有一片沼泽地.方便地,我们用一个$n\times n$的网格图来描述它,每一个格子代表着沼泽地的一小片区域.其中$(1,1)$代表网格图的左上角,$(n,n)$代表网格图的右下角.若用$ ...
- Modular arithmetic and Montgomery form 实现快速模乘
题目: 电音之王 题解: 求数列前n项相乘并取模 思路: ①.这题的乘法是爆long long的,可以通过快速幂的思想去解决(按数位对其中的一个数进行剖分).当然你的乘法会多出一个log的复杂度... ...
- 使用SSH方式实现Git远程连接GitHub/gitlab
参照: https://blog.csdn.net/wuli_smbug/article/details/81480162
- Jenkins构建触发器的区别
Build periodically:定时进行项目构建或执行(它不care源码是否发生变化),配置如下: 0 2 * * * (每天2:00 必须build一次源码) 如果是要定时执行脚本,需要选择 ...