BZOJ3291Alice与能源计划——匈牙利算法+模拟费用流
题目描述
输入
输出
样例输入
1 1
4 4 1
8 7 1 2 5 1
2 3
0 0 3
2 0 2
1 1 5 1 3 0
1 0 5 1 1 1
3 0 5 1 3 0
2 3
0 0 3
2 0 2
1 1 2 0 3 0
1 0 1 0 1 1
3 0 3 0 2 0
2 3
0 0 3
2 0 2
1 1 4 2 2 0
1 0 2 9 1 1
3 0 5 4 2 1
样例输出
1
1
1 2
-1
6
1 2
样例说明
第1组测试数据:
只有一个居民点,其坐标为(4,4),能源需求量Power1=1;仅一座发电站,其坐标为(8,7),产生的能量上限Limit1
=1,建设费用Price1=2,服务范围半径R1=5,Finished1=1表示已经建成。
两个点之间的距离等于5不超过R1,并且Power1≤Limit1。因此唯一的可行方案是花费0的代价保留1号发电站,使
它为1号居民点提供能源。
第2组测试数据:任意选择两个发电站都是一个可行方案。最小代价是1,对应的方案有两种:选择1号和2号发电站;选择2号和3号发电站。而前者的字典序更小。
第3组测试数据:不存在可行方案。
第4组测试数据:代价最小的方案唯一:选择1号和2号发电站,代价为6。
#include<set>
#include<map>
#include<queue>
#include<stack>
#include<cmath>
#include<cstdio>
#include<vector>
#include<bitset>
#include<cstring>
#include<iostream>
#include<algorithm>
using namespace std;
int head[510];
int to[200010];
int next[200010];
int from[410];
int vis[410];
int ans;
int n,m,T;
int x[410];
int y[410];
int opt;
int tot;
int v[410];
int a[410];
int now;
struct miku
{
int x,y,l,r,p,id;
}s[510];
void add(int x,int y)
{
next[++tot]=head[x];
head[x]=tot;
to[tot]=y;
}
bool cmp(miku a,miku b)
{
return a.p==b.p?a.id<b.id:a.p<b.p;
}
bool dfs(int x)
{
for(int i=head[x];i;i=next[i])
{
if(vis[to[i]]!=now)
{
vis[to[i]]=now;
if(!from[to[i]]||dfs(from[to[i]]))
{
from[to[i]]=x;
return true;
}
}
}
return false;
}
int main()
{
scanf("%d",&T);
while(T--)
{
scanf("%d%d",&n,&m);
ans=0,tot=0;
memset(head,0,sizeof(head));
memset(from,0,sizeof(from));
memset(vis,0,sizeof(vis));
for(int i=1;i<=n;i++)
{
scanf("%d%d%d",&x[i],&y[i],&v[i]);
}
for(int i=1;i<=m;i++)
{
scanf("%d%d%d%d%d%d",&s[i].x,&s[i].y,&s[i].l,&s[i].p,&s[i].r,&opt);
s[i].id=i;
if(opt)
{
ans+=s[i].p;
s[i].p=-s[i].p;
}
}
for(int i=1;i<=n;i++)
{
for(int j=1;j<=m;j++)
{
if(v[i]<=s[j].l&&(s[j].x-x[i])*(s[j].x-x[i])+(s[j].y-y[i])*(s[j].y-y[i])<=s[j].r*s[j].r)
{
add(j,i);
}
}
}
sort(s+1,s+1+m,cmp);
int k=0;
for(int i=1;i<=m;i++)
{
now=i;
if(dfs(s[i].id))
{
ans+=s[i].p;
k++;
a[k]=s[i].id;
}
if(k==n)
{
break;
}
}
if(k==n)
{
printf("%d\n",ans);
sort(a+1,a+1+n);
for(int i=1;i<=n;i++)
{
printf("%d",a[i]);
printf(i==n?"\n":" ");
}
}
else
{
printf("-1\n");
}
}
}
BZOJ3291Alice与能源计划——匈牙利算法+模拟费用流的更多相关文章
- BZOJ2557[Poi2011]Programming Contest——匈牙利算法+模拟费用流
题目描述 Bartie and his friends compete in the Team Programming Contest. There are n contestants on each ...
- 【bzoj3291】Alice与能源计划 模拟费用流+二分图最大匹配
题目描述 在梦境中,Alice来到了火星.不知为何,转眼间Alice被任命为火星能源部长,并立刻面临着一个严峻的考验. 为了方便,我们可以将火星抽象成平面,并建立平面直角坐标系.火星上一共有N个居民点 ...
- 【CF280D】 k-Maximum Subsequence Sum ,线段树模拟费用流
昨天考试被教育了一波.为了学习一下\(T3\)的科技,我就找到了这个远古时期的\(cf\)题(虽然最后\(T3\)还是不会写吧\(QAQ\)) 顾名思义,这个题目其实可以建成一个费用流的模型.我们用流 ...
- [NOI2019]序列(模拟费用流)
题意: 有两个长度为n的序列,要求从每个序列中选k个,并且满足至少有l个位置都被选,问总和最大是多少. \(1\leq l\leq k\leq n\leq 2*10^5\). 首先,记录当前考虑到的位 ...
- 贪心(模拟费用流):NOIP2011 观光公交
[问题描述] 风景迷人的小城Y 市,拥有n 个美丽的景点.由于慕名而来的游客越来越多,Y 市特意安排了一辆观光公交车,为游客提供更便捷的交通服务.观光公交车在第0 分钟出现在1号景点,随后依次前往2. ...
- BZOJ4977[Lydsy1708月赛]跳伞求生——贪心+堆+模拟费用流
题目链接: 跳伞求生 可以将题目转化成数轴上有$n$个人和$m$个房子,坐标分别为$a_{i}$和$b_{i}$,每个人可以进一个他左边的房子,每个房子只能进一个人.每个房子有一个收益$c_{i}$, ...
- 【bzoj1150】[CTSC2007]数据备份Backup 模拟费用流+链表+堆
题目描述 你在一家 IT 公司为大型写字楼或办公楼(offices)的计算机数据做备份.然而数据备份的工作是枯燥乏味的,因此你想设计一个系统让不同的办公楼彼此之间互相备份,而你则坐在家中尽享计算机游戏 ...
- [UOJ455][UER #8]雪灾与外卖——堆+模拟费用流
题目链接: [UOJ455]雪灾与外卖 题目描述:有$n$个送餐员(坐标为$x_{i}$)及$m$个餐厅(坐标为$y_{i}$,权值为$w_{i}$),每个送餐员需要前往一个餐厅,每个餐厅只能容纳$c ...
- BZOJ4849[Neerc2016]Mole Tunnels——模拟费用流+树形DP
题目描述 鼹鼠们在底下开凿了n个洞,由n-1条隧道连接,对于任意的i>1,第i个洞都会和第i/2(取下整)个洞间有一条隧 道,第i个洞内还有ci个食物能供最多ci只鼹鼠吃.一共有m只鼹鼠,第i只 ...
随机推荐
- 在DevExpress程序中使用PopupContainerEdit和PopupContainer实现数据展示
在一些数据的即时查询场景中,我们可能需要对输入信息进行模糊查询并进行选择,例如在一些文本输入场景,如输入某个站点编码或者设备编码,然后获取符合的列表供用户选择的场景,本篇随笔介绍在DevExpress ...
- 使用Filter过滤器+重写Request完美解决乱码问题
一:原理 1.对于Post方式提交的数据,我们可以通过直接设置request和response的编码方式来解决乱码问题:但是Get方式提交的数据,那么就需要编码再解码的方式解决乱码问题. 2.我们一般 ...
- 使用hibernate造成的MySql 8小时问题解决方案
本文借鉴了网上的很多博客,在此不再声明 总结 1.增加 MySQL 的 wait_timeout 属性的值(不推荐) mysql5之前的版本,可以在jdbc连接的url中加入:autoReconnec ...
- Appium-实现手势密码登陆
前言: 前几天有人问我,手势登陆如何做?于是我找了一个APP试了试,所以本文来总结使用Python+Appium来实现手势密码登陆APP. 环境: MacOS:10.13.4 Appium-deskt ...
- Jq相关常用操作
1.select下拉列表操作 $(".kstitle").live('change', function () { var workType = $(this).val(); // ...
- Mike and gcd problem CodeForces - 798C (贪心思维+数论)
题目链接 比较棒的一道题, 题意: 给你一个N个数的数组,让你用尽量少的操作使整个数组的gcd大于1,即gcd(a1 ,a2,,,,an) > 1 如果可以输出YES和最小的次数,否则输出NO ...
- 软件扒网站? 爬虫? F12查看源码? 查看网页源代码?浏览器sources? 区别和联系!
1.软件扒网站: 利用各类扒站网站,如仿站小工具8.0,可以按照规则将网站的未经浏览器简析的前端代码扒下来,并整理成css,js,html等文件夹,很方便.(当然看不到ajax等相关代码) 备注:如果 ...
- nodejs 中的一些方法
fs.unlink(path, [callback(err)]) //删除文件操作. //path 文件路径 //callback 回调,传递一个异常参数err. ndoe中解决跨域问题 expres ...
- node-sass下载失败 关于webpack
安装node-sass提示没有vendor目录的解决办法在node-sass目录下面新建一个vendor的空目录,然后运行npm/cnpm rebuild node-sass --save-dev即可 ...
- java面试题2019
面向对象的特征有哪些方面? 原来学的时候说是三种特征,即封装.继承和多态. 现在一般说面向对象有四大特性,即抽象.封装.继承和多态. 1.抽象:将同类对象的共同特征提取出来构造类. 2.封装:将数据隐 ...