传送门


在Luogu上评了”NOI“之后评级变成了”普及+/提高“……我觉得我可能要退群了

考虑构造一个这样的图:

其中上半部分是从\(S\)开始的一条长\(100\)、每条边权都为\(x\)的链(长度超过\(100\)显然是没有意义的),下半部分是以\(T\)结束的一条长\(100\)、每条边权都为\(y\)的链。在这两条链中间,有\(101 \times 101\)条边(上图中只画出了部分),边权为一个矩阵\(f_{i,j}\)。如果要经过\(f_{i,j}\)对应的边,那么需要从\(S\)开始沿着上半部分的链走\(i\)步,然后经过\(f_{i,j}\),最后沿着下半部分的链走\(j\)步到达\(T\),总边权就是\(xi+yj+f_{i,j}\)。

在这个图中,有\(d_{x,y} = \min\limits_{a,b \geq 0} xa + yb + f_{a,b}\),松弛条件得\(\forall a , b \geq 0 , d_{x,y} \leq xa + yb + f_{a,b}\),即\(f_{a,b} \geq d_{x,y} - xa - yb\)。

这样可以对于每个\(f_{a,b}\)得到\(A \times B\)个不等式,可得\(f_{a,b}\)的解集。而\(f_{a,b}\)一定需要取到其中的最小值(如果不取到最小值,可能存在\(x,y\)满足\(\min\limits_{a,b \geq 0} xa + yb + f_{a,b} > d_{x,y}\)),所以可以得到\(f_{a,b}\)的确切值。然后再代入\(d_{x,y}\)的式子检验以下图是否合法即可。

时间复杂度\(O(N^3)\)

#include<iostream>
#include<cstdio>
#include<cstdlib>
#include<ctime>
#include<cctype>
#include<algorithm>
#include<cstring>
#include<iomanip>
#include<queue>
#include<map>
#include<set>
#include<bitset>
#include<vector>
#include<stack>
#include<cmath>
#include<random>
//This code is written by Itst
using namespace std; inline int read(){
int a = 0;
char c = getchar();
bool f = 0;
while(!isdigit(c) && c != EOF)
c = getchar();
if(c == EOF)
exit(0);
while(isdigit(c)){
a = a * 10 + c - 48;
c = getchar();
}
return f ? -a : a;
} int d[12][12] , f[107][107]; signed main(){
int A = read() , B = read();
for(int i = 1 ; i <= A ; ++i)
for(int j = 1 ; j <= B ; ++j)
d[i][j] = read();
for(int i = 0 ; i <= 100 ; ++i)
for(int j = 0 ; j <= 100 ; ++j)
for(int p = 1 ; p <= A ; ++p)
for(int q = 1 ; q <= B ; ++q)
f[i][j] = max(f[i][j] , d[p][q] - i * p - j * q);
for(int i = 1 ; i <= A ; ++i)
for(int j = 1 ; j <= B ; ++j){
int minN = 1e9;
for(int p = 0 ; p <= 100 ; ++p)
for(int q = 0 ; q <= 100 ; ++q)
minN = min(minN , f[p][q] + p * i + q * j);
if(minN != d[i][j]){
puts("Impossible");
return 0;
}
}
puts("Possible");
puts("202 10401");
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" , 1 + i , 202 - j , f[i][j]);
puts("1 202");
return 0;
}

ARC089E GraphXY 构造的更多相关文章

  1. 学习笔记:Maven构造版本号的方法解决浏览器缓存问题

    需要解决的问题 在做WEB系统开发时,为了提高性能会利用浏览器的缓存功能,其实即使不显式的申明缓存,现代的浏览器都会对静态文件(js.css.图片之类)缓存.但也正因为这个问题导致一个问题,就是资源的 ...

  2. 一步步构造自己的vue2.0+webpack环境

    前面vue2.0和webpack都已经有接触了些(vue.js入门,webpack入门之简单例子跑起来),现在开始学习如何构造自己的vue2.0+webpack环境. 1.首先新建一个目录vue-wk ...

  3. About 静态代码块,普通代码块,同步代码块,构造代码块和构造函数的纳闷

    构造函数用于给对象进行初始化,是给与之对应的对象进行初始化,它具有针对性,函数中的一种.特点:1:该函数的名称和所在类的名称相同.2:不需要定义返回值类型.3:该函数没有具体的返回值.记住:所有对象创 ...

  4. Eos开发——构造查询条件

    1.ajax 方式 var data = { orgid :orgid,year:year ,month: month,type:type,sortField:'sellEmpname' ,sortO ...

  5. 【C++】类和对象(构造与析构)

    类 类是一种抽象和封装机制,描述一组具有相同属性和行为的对象,是代码复用的基本单位. 类成员的访问权限 面向对象关键特性之一就是隐藏数据,采用机制就是设置类成员的访问控制权限.类成员有3种访问权限: ...

  6. Spring 设值注入 构造注入 p命名空间注入

    注入Bean属性---构造注入配置方案 在Spring配置文件中通过<constructor-arg>元素为构造方法传参 注意: 1.一个<constructor-arg>元素 ...

  7. 并发包的线程池第二篇--Executors的构造

    上一篇讲述了ThreadPoolExecutor的执行过程,我们也能看出来一个很明显的问题:这个线程池的构造函数比较复杂,对于不十分理解其运作原理的程序员,自己构造它可能体现和想象中不一样的行为.比如 ...

  8. 10、代码块、构造代码块、静态代码块及main方法之间的关系

    1.普通代码块: 在方法或语句中出现在{}之间的类容就称为普通代码块,简称代码块.普通代码块和一般的语句执行顺序由他们在代码中出现的次序决定--“先出现先执行”,即顺序执行. /*下面第一个类时合法的 ...

  9. json 构造和解析

    目录: (1)引入jar包: (2)json的构造: (3)json的解析: (4)遍历未知key. (1)java对json的处理,可借助org.json.jar. <!-- https:// ...

随机推荐

  1. SpringCloud应对高并发的思路

    一.Eureka的高可用性 Eureka下面的服务实例默认每隔30秒会发送一个HTTP心跳给Eureka,来告诉Eureka服务还活着,每个服务实例每隔30秒也会通过HTTP请求向Eureka获取服务 ...

  2. ioc初步理解(一) 简单实用autofac搭建mvc三层+ioc(codeFirst)

    1]首先搭好框架 1.1]搭建ui层 1.2]创建其他内库文件 整个项目基本部分搭建完毕之后如下 2]使用nuget引用文件 先在每一个项目中引入ef 然后再UI层引入以下两个文件autofac和Au ...

  3. linux系统管理--top命令

    这些日子,运维公司三台服务器,一个小伙伴貌似对top命令不太感冒,我告诉他去百度(不懂谷歌百度的程序员不是好厨师),然后突然发现也许我自己该整理一下相关的东西了 top命令是Linux下常用的性能分析 ...

  4. Mybatis框架基础支持层——反射工具箱之对象工厂ObjectFactory&DefaultObjectFactory(5)

    ObjectFactory官方简介:MyBatis每次创建结果集对象的新实例时,它都会使用一个对象工厂(ObjectFactory)实例来完成. 默认的对象工厂需要做的仅仅是实例化目标类,要么通过默认 ...

  5. MySQL主从复制配置指导及PHP读写分离源码分析

    开发环境 master环境:ubuntu16.04.5LTS/i5/8G/500G/64位/mysql5.7.23/php7/apache2 slave环境:kvm虚拟机/ubuntu14.04.01 ...

  6. springboot之配置文件

    springboot在加载配置文件的时候是有先后顺序的,了解加载配置文件的先后顺序,可以减少编写程序出现错误 1 springboot加载配置文件的先后顺序如下: SpringApplication将 ...

  7. css隐藏滚动条

    xhtml中隐藏滚动条在用ie6浏览有框架的xhtml页面的时候,默认会水平和垂直滚动条会一起出现,这是ie6的一个bug,在firefox上是正常的,出现的原因是其对XHTML 1.0 transi ...

  8. git push origin与git push -u origin master的区别

    $ git push origin 上面命令表示,将当前分支推送到origin主机的对应分支. 如果当前分支只有一个追踪分支,那么主机名都可以省略. $ git push 如果当前分支与多个主机存在追 ...

  9. Java基础static的探究

    static方法就是没有this的方法. 在static方法内部不能调用非静态方法, 但是在非静态的方法中可以调用静态的方法和变量. 而且可以在没有创建任何对象的前提下,仅仅通过类本身来调用stati ...

  10. HALCON学习笔记

    2019-2-2: 硬件选型--->镜头光源相机选型第一讲.avi: 高斯公式:1/u+1/v=1/f  u:物距  v:像距 f:焦距 线放大倍率:像高/物高  或者 像距/物距 镜头需要掌握 ...