题解 AT3877 【[ARC089C] GraphXY】
在【有趣的思维题】里看到了这道题。
题意:
给出一个\(A\times B\)的矩阵,其中第i行第j列元素为\(d_{i,j}\),试构造一个有向图,满足:
有向图点数\(\le 300\)
没有重边和自环
图中边有边权,边权\(\in [0,100]\)且是正整数。或者是未知数X或者Y
对于所有\(x \in [1,A] \ y\in[1,B]\),满足未知数\(X=x,Y=y\)时,图中s到t的最短路为\(d_{x,y}\)
看清楚题目了,睁大眼睛。s和t是自己选定的,x和y是在区间内变化的,再读一遍题意。
分析:
当 \(s\) 与 \(t\) 之间的路径上有 \(i\) 个\(x\) ,\(j\) 个 \(y\) ,设 \(f_{i,j}\) 表示此时路径上其余边的最小可能长度。
\(d_{x,y}\ge ix+jy+f_{i,j}\) 。
有:\(d_{x,y}=\min \{ix+jy+f_{i,j}\}\)
尝试构造一种情况,
\(f_{i,j}=\max \{d_{x,y}-ix-jy\}\)
连两条长度为 \(100\) ,有 \(101\) 个点的链,一条链所有边权为 \(X\) ,另一条链所有边权为 \(Y\)
\(X\) 链的第 \(i\) 个节点和 \(Y\) 链的倒数第 \(j\) 个节点间连一条边权 \(f_{i,j}\) 的边。
如果 \(d_{x,y} \neq \min \{ix+jy+f_{i,j}\}\) 则是无解情况。
否则输出答案。
#include<bits/stdc++.h>
using namespace std;
const int inf=0x3f3f3f3f,N=310;
int n,m,f[N][N],d[N][N];
int bmin(int a,int b){ return (a<b)?a:b;}
int bmax(int a,int b){ return (a<b)?b:a;}
int main(){
scanf("%d%d",&n,&m);
for(int i=1;i<=n;i++) for(int j=1;j<=m;j++)
scanf("%d",&d[i][j]);
for(int i=0;i<=100;i++) for(int j=0;j<=100;j++)
for(int x=1;x<=n;x++) for(int y=1;y<=m;y++)
f[i][j]=bmax(f[i][j],d[x][y]-i*x-j*y);
for(int x=1;x<=n;x++) for(int y=1;y<=m;y++){
int mn=inf;
for(int i=0;i<=100;i++) for(int j=0;j<=100;j++)
mn=bmin(mn,f[i][j]+i*x+j*y);
if(mn!=d[x][y]){ puts("Impossible"); return 0; }
}
puts("Possible"); printf("202 10401\n");
for(int i=1;i<=100;i++) printf("%d %d X\n",i,i+1);
for(int i=102;i<202;i++) printf("%d %d Y\n",i,i+1);
for(int i=0;i<=100;i++) for(int j=0;j<=100;j++)
printf("%d %d %d\n",i+1,202-j,f[i][j]);
puts("1 202");
return 0;
}
题解 AT3877 【[ARC089C] GraphXY】的更多相关文章
- 2016 华南师大ACM校赛 SCNUCPC 非官方题解
我要举报本次校赛出题人的消极出题!!! 官方题解请戳:http://3.scnuacm2015.sinaapp.com/?p=89(其实就是一堆代码没有题解) A. 树链剖分数据结构板题 题目大意:我 ...
- noip2016十连测题解
以下代码为了阅读方便,省去以下头文件: #include <iostream> #include <stdio.h> #include <math.h> #incl ...
- BZOJ-2561-最小生成树 题解(最小割)
2561: 最小生成树(题解) Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 1628 Solved: 786 传送门:http://www.lyd ...
- Codeforces Round #353 (Div. 2) ABCDE 题解 python
Problems # Name A Infinite Sequence standard input/output 1 s, 256 MB x3509 B Restoring P ...
- 哈尔滨理工大学ACM全国邀请赛(网络同步赛)题解
题目链接 提交连接:http://acm-software.hrbust.edu.cn/problemset.php?page=5 1470-1482 只做出来四道比较水的题目,还需要加强中等题的训练 ...
- 2016ACM青岛区域赛题解
A.Relic Discovery_hdu5982 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Jav ...
- poj1399 hoj1037 Direct Visibility 题解 (宽搜)
http://poj.org/problem?id=1399 http://acm.hit.edu.cn/hoj/problem/view?id=1037 题意: 在一个最多200*200的minec ...
- 网络流n题 题解
学会了网络流,就经常闲的没事儿刷网络流--于是乎来一发题解. 1. COGS2093 花园的守护之神 题意:给定一个带权无向图,问至少删除多少条边才能使得s-t最短路的长度变长. 用Dijkstra或 ...
- CF100965C题解..
求方程 \[ \begin{array}\\ \sum_{i=1}^n x_i & \equiv & a_1 \pmod{p} \\ \sum_{i=1}^n x_i^2 & ...
随机推荐
- 069 01 Android 零基础入门 01 Java基础语法 09 综合案例-数组移位 01 综合案例-数组移位-案例需求
069 01 Android 零基础入门 01 Java基础语法 09 综合案例-数组移位 01 综合案例-数组移位-案例需求 本文知识点:综合案例-数组移位-案例需求 说明:因为时间紧张,本人写博客 ...
- 013 01 Android 零基础入门 01 Java基础语法 02 Java常量与变量 07 基本数据类型变量的存储
013 01 Android 零基础入门 01 Java基础语法 02 Java常量与变量 07 基本数据类型变量的存储 变量和它的值如何在内存中进行存储的? 前面学习过:Java中的数据类型分为基本 ...
- Java知识系统回顾整理01基础06数组03排序
一.选择法排序 选择法排序的思路: 把第一位和其他所有的进行比较,只要比第一位小的,就换到第一个位置来 比较完后,第一位就是最小的 然后再从第二位和剩余的其他所有进行比较,只要比第二位小,就换到第二个 ...
- 【题解】[USACO12MAR]Cows in a Skyscraper G
题目链接 题目大意:给定一个集合\(S\),给一个限制条件\(P\),要求划分集合,使得每一个子集\(A\in S\),\(A\)满足限制条件\(P\),且划分总数最小. 注意到数据范围\(n< ...
- Java之线程池解析
线程池 目录 线程池 线程池概述 创建一个线程池并提交线程任务 线程池源码解析 参数认识 构造方法 提交任务 addWorker 执行任务 关闭线程池 线程池概述 什么是线程池 为什么使用线程池 线程 ...
- JVM 第四篇:可视化 JVM 故障处理工具
本文内容过于硬核,建议有 Java 相关经验人士阅读. 1. 可视化工具 在 JDK 中为我们提供了大量的 JVM 故障处理工具,都在 JDK 的 bin 目录下: 这其中除了大量的命令行工具以外,还 ...
- iOS使用NSTextAttachment添加图片,图片模糊
最近在忙的项目中,需要处理富文本的相关内容,产品需求并不复杂,所以想着用TextKit处理,顺便学习一下,没想到直接掉坑.在此记录一下(都是血泪史),顺便为有需要的小伙伴提供参考. // Add th ...
- 用-pthread替代-lpthread
-pthread 在多数系统中,-pthread会被展开为"-D_REENTRANT -lpthread".作为编译参数可以通知系统函数开启多线程安全特性,比如将errno定义线程 ...
- xshell多窗口同时执行输入命令
- Kubernetes K8S之存储Volume详解
K8S之存储Volume概述与说明,并详解常用Volume示例 主机配置规划 服务器名称(hostname) 系统版本 配置 内网IP 外网IP(模拟) k8s-master CentOS7.7 2C ...