TopCoder12727 「SRM590Hard」FoxAndCity 最小割离散变量模型
问题描述
一张 \(N\) 个点无向图,边权都为 \(1\) ,添加若干条边,最小化 \(\sum\limits_{1 \le i \le n,i \in N_{+}}{(a_i-b_i)^2}\)。 \(b_i\) 是输入的, \(a_i\) 是 \(1\) 号点到 \(i\) 号点的最短路。
题解
添加边后, \(a_i\) 不会变小。
\(a_i\) 就是离散变量。
原来有边的两个点 \(x,y\) 的最短路长度差值不会超过 \(1\) 。
\(\mathrm{Code}\)
#include<bits/stdc++.h>
using namespace std;
const int INF=0x3f3f3f3f;
//#define local
//#define file
int n,b[47],S,T;
char s[47][47];
int Head[2507],d[2507];
int to[500007],Next[500007],w[500007],tot=1;
void addedge(int x,int y,int z){
to[++tot]=y,Next[tot]=Head[x],Head[x]=tot,w[tot]=z;
}
void add(int x,int y,int z){
addedge(x,y,z);addedge(y,x,0);
}
void Init(void){
scanf("%d",&n);
for(int i=1;i<=n;i++) scanf("%s",s[i]+1);
for(int i=1;i<=n;i++) scanf("%d",&b[i]);
}
int dis[2507],sum[2507];
bool vis[2507];
#define pii(x,y) make_pair(x,y)
void dijkstra(){
memset(dis,0x3f,sizeof(dis));
priority_queue < pair<int,int> > q;
dis[1]=0;q.push(pii(0,1));
while(!q.empty()){
int x=q.top().second;q.pop();
if(vis[x]) continue;
vis[x]=1;
for(int i=1;i<=n;i++){
if(s[x][i]=='N') continue;
if(dis[i]>dis[x]+1){
dis[i]=dis[x]+1;
q.push(pii(-dis[i],i));
}
}
}
}
int id(int x,int y){
return (x-1)*n+y;
}
void debug(void){
for(int i=2;i<=tot;i+=2){
printf("-- From %d to %d w = %d \n",to[i^1],to[i],w[i]);
}
printf("## S = %d , T = %d\n",S,T);
}
void Graph_build(void){
// dijkstra();
// for(int i=1;i<=n;i++) sum[i]=sum[i-1]+dis[i]+1;
S=n*n+1,T=S+1;
add(1,T,INF);//错误笔记:1号点最短路为零,为了防止S->1->T不能正常加边,但是1->T还是得加
for(int i=2;i<=n;i++){
add(S,id(i,1),INF);
for(int j=1;j<n;j++){
int price=(j-b[i])*(j-b[i]);
add(id(i,j),id(i,j+1),price);
}
add(id(i,n),T,INF);
}
for(int x=1;x<=n;x++){
for(int y=1;y<=n;y++){
if(s[x][y]=='N') continue;
// int lim=min(dis[x],dis[y]);
for(int i=1;i<n;i++){
add(id(x,i+1),id(y,i),INF);
}
}
}
// debug();
}
bool bfs(void){
memset(d,0,sizeof(d));
queue<int>q;q.push(S);d[S]=1;
while(!q.empty()){
int x=q.front();q.pop();
for(int i=Head[x];i;i=Next[i]){
int y=to[i];
if(d[y]||!w[i]) continue;
d[y]=d[x]+1;q.push(y);
if(y==T) return true;
}
}
return false;
}
int dfs(int x,int flow){
if(x==T) return flow;
int rest=flow;
for(int i=Head[x];i;i=Next[i]){
int y=to[i];
if(d[y]!=d[x]+1||!w[i]) continue;
int k=dfs(y,min(rest,w[i]));
if(!k) d[y]=0;
else w[i]-=k,w[i^1]+=k,rest-=k;
}
return flow-rest;
}
int Dinic(void){
int res(0),t;
while(bfs()){
while(t=dfs(S,INF)) res+=t;
}
return res;
}
int Work(void){
Graph_build();
return Dinic();
}
#ifndef local
class FoxAndCity{
public:
int minimalCost(vector<string>str,vector<int>in){
n=str[0].size();
for(int i=0;i<n;i++){
b[i+1]=in[i];
for(int j=0;j<n;j++){
s[i+1][j+1]=str[i][j];
}
}
return Work();
}
};
#endif
#ifdef local
int main(){
#ifdef file
freopen("hzlbn.in","r",stdin);
#endif
Init();
printf("%d\n",Work());
return 0;
}
#endif
TopCoder12727 「SRM590Hard」FoxAndCity 最小割离散变量模型的更多相关文章
- BZOJ3144/LG3227 「HNOI2013」切糕 最小割离散变量模型
问题描述 BZOJ3144 LG3227 还想粘下样例 输入: 2 2 2 1 6 1 6 1 2 6 2 6 输出: 6 题解 关于离散变量模型,我不想再抄一遍,所以: 对于样例,可以建立出这样的图 ...
- Codechef RIN 「Codechef14DEC」Course Selection 最小割离散变量模型
问题描述 提供中文版本好评,一直以为 Rin 是题目名字... pdf submit 题解 参考了 东营市胜利第一中学姜志豪 的<网络流的一些建模方法>(2016年信息学奥林匹克中国国家队 ...
- 【BZOJ 3232】圈地游戏 二分+SPFA判环/最小割经典模型
最小割经典模型指的是“一堆元素进行选取,对于某个元素的取舍有代价或价值,对于某些对元素,选取后会有额外代价或价值”的经典最小割模型,建立倒三角进行最小割.这个二分是显然的,一开始我也是想到了最小割的那 ...
- LG1345 「USACO5.4」Telecowmunication 最小割
问题描述 LG1345 题解 点边转化,最小割,完事. \(\mathrm{Code}\) #include<bits/stdc++.h> using namespace std; tem ...
- 「跬步千里」详解 Java 内存模型与原子性、可见性、有序性
文题 "跬步千里" 主要是为了凸显这篇文章的基础性与重要性(狗头),并发编程这块的知识也确实主要围绕着 JMM 和三大性质来展开. 全文脉络如下: 1)为什么要学习并发编程? 2) ...
- 【LA3487】最小割-经典模型 两种方法
题目链接 题意:A.B两个公司要买一些资源(他们自己买的资源不会重复),一个资源只能卖给一个公司.问最大收益. simple input 部分: 54 1 //买到1就给54元 15 2 33 3 2 ...
- LOJ #2205. 「HNOI2014」画框 解题报告
#2205. 「HNOI2014」画框 最小乘积生成树+KM二分图带权匹配 维护一个\((\sum A,\sum B)\)的匹配下凸包,答案在这些点中产生. 具体的,凸包两端可以直接跑单独的\(A\) ...
- 【BZOJ-1324】Exca王者之剑 最小割
1324: Exca王者之剑 Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 483 Solved: 248[Submit][Status][Disc ...
- [置顶] [BZOJ]2127: happiness 最小割
happiness: Description 高一一班的座位表是个n*m的矩阵,经过一个学期的相处,每个同学和前后左右相邻的同学互相成为了好朋友.这学期要分文理科了,每个同学对于选择文科与理科有着自己 ...
随机推荐
- 基于iCamera测试高清摄像头OV7725小结
基于iCamera测试高清摄像头OV7725小结 先看看硬件特点 然后看看硬件测试,usb采集出图 默认是不带晶振的,可以通过usb提供提供12M.24M.48M时钟 软件出图 可以通过修改0x11, ...
- jmeter微信公众号接口测试实例
线程组 HTTP Cookie 管理器 HTTP 请求默认值 用户定义的变量 察看结果树 HTTP请求 响应断言 正则表达式提取器 线程组 HTTP Cookie 管理器 HTTP 请求默认值 用户定 ...
- Django(一):url路由配置和模板渲染
urls.py路由用法 url基本概念 url格式 urls.py的作用 url解析过程 include的作用 kwarg的作用 name的作用 URL概念 URL(Uniform Resoure L ...
- pymysql的操作
目录 python 操作mysql 安装pymysql 模块 sql注入问题 产生的原因 解决的方法 连接 查 增 修 删 索引 使用索引的作用 索引的本质 索引的底层原理 索引的种类 索引的创建 主 ...
- Windows下mysql-5.7.28下载、安装、配置教程
最近需要更换mysql数据库的版本,写一篇文章,记录一下 一.下载mysql数据库 mysql的下载共有两种,一种是zip压缩文件,另一种是msi安装程序 官方5.7版本zip压缩文件下载页面 官方5 ...
- JavaWeb学习——页面跳转方式
JavaWeb学习——页面跳转方式 摘要:本文主要学习了请求转发和响应重定向,以及两者之间的区别. 请求转发 相关方法 使用HttpServletRequest对象的 getRequestDispat ...
- Odoo系统有哪些不同版本?
来源:www.odooyun.com 1. Odoo10.0 vs Odoo11.0 vs 8.0 截至2017年底,最新的Odoo发布版为Odoo 11.0,但功能上有一定精简(去除财务模块,去除工 ...
- React: 高阶组件(HOC)
一.简介 如我们所知,JavaScript有高阶函数这么一个概念,高阶函数本身是一个函数,它会接收或者返回一个函数,进而对该函数进行操作.其实,在React中同样地有高阶组件这么一个东西,称为HOC, ...
- vue-element-admin在install的时候关于sass的错误信息
vue-element-admin在install的是报关于sass的错误信息 今天使用vue-element-admin给自己弄的一个微信小程序编写一个后台管理系统的时候,报关于sass的错误,下载 ...
- android:Program type already present: android.support.v4.app.INotificationSideChannel
背景 这个错误的原因是:androidx和 android.support同时存在. 首先,网上有很多解答说这样处理: 在 gradle.properties 添加: android.useAndro ...