2021.07.23 P2474 天平(差分约束)
2021.07.23 P2474 天平(差分约束)
[P2474 SCOI2008]天平 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn)
题意:
已知A,B和每两个点点权,求点权i,j,使得A+B>i+j的方案数ans1,A+B==i+j的方案数ans2,A+B<i+j的方案数ans3。
分析:
A+B>i+j可以化为A-i>j-B||i-A<B-j;A+Bi+j可以化为A-ij-B||i-A==B-j;A+B<i+j可以化为A-i<j-B||i-A>B-j。当然,i也可以与B搭配,j也可以与A搭配。所以对于每个条件都有两个式子。接下来,欢迎差分约束上台表演!maxn(i,j)表示从点i到点j之间最大值,minn(i,j)表示从点i到点j最小值。
代码如下:
#include<cstdio>
#include<algorithm>
#include<cstring>
#include<iostream>
using namespace std;
int n,A,B,maxn[55][55],minn[55][55],ans1,ans2,ans3;
inline int read(){
int s=0,w=1;
char ch=getchar();
while(ch<'0'||ch>'9'){
if(ch=='-')w=-1;
ch=getchar();
}
while(ch<='9'&&ch>='0'){
s=s*10+ch-'0';
ch=getchar();
}
return s*w;
}
int main(){
n=read();A=read();B=read();
string a;
for(int i=1;i<=n;i++){
cin>>a;
for(int j=0;j<a.size();j++){
if(i==j+1||a[j]=='=')maxn[i][j+1]=minn[i][j+1]=0;
else if(a[j]=='-')maxn[i][j+1]=-1,minn[i][j+1]=-2;//二者差最大为2,最小为1,这里i<j,用负号
else if(a[j]=='+')maxn[i][j+1]=2,minn[i][j+1]=1;//二者差最大为2,最小为1,这里i>j,用正号
else maxn[i][j+1]=2,minn[i][j+1]=-2;//这里是最大差2
}
}
for(int k=1;k<=n;k++){
for(int i=1;i<=n;i++){
if(i==k)continue;
for(int j=1;j<=n;j++){
if(i==j)continue;
maxn[i][j]=min(maxn[i][k]+maxn[k][j],maxn[i][j]);//求最大值的最小值,为了满足更多约束条件
minn[i][j]=max(minn[i][k]+minn[k][j],minn[i][j]);//求最小值的最大值,为了满足更多约束条件
}
}
}
for(int i=1;i<=n;i++){
if(i==A||i==B)continue;
for(int j=1;j<i;j++){
if(j==A||j==B)continue;
if(minn[A][i]>maxn[j][B]||minn[B][i]>maxn[j][A])++ans1;//A+B>i+j
else if(minn[i][A]>maxn[B][j]||minn[i][B]>maxn[A][j])++ans3;//A+B<i+j
//此处换为 else if(maxn[A][i]<minn[j][B]||maxn[B][i]<minn[j][A])++ans3; 也可以
else if((maxn[A][i]==minn[j][B]&&minn[A][i]==maxn[j][B]&&maxn[A][i]==minn[A][i])//A+B==i+j
||(maxn[B][i]==minn[j][A]&&minn[B][i]==maxn[j][A]&&maxn[B][i]==minn[B][i]))++ans2;
//当只有唯一一个确定的值才能正式确定“=”
}
}
cout<<ans1<<" "<<ans2<<" "<<ans3;
return 0;
}
2021.07.23 P2474 天平(差分约束)的更多相关文章
- 2021.07.23 P3275 糖果(差分约束)
2021.07.23 P3275 糖果(差分约束) [P3275 SCOI2011]糖果 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) 重点: 1.为了满足更多更多约束条件,合适地 ...
- 洛谷2474 [SCOI2008] 天平 差分约束->枚举
题目描述 你有n个砝码,均为1克,2克或者3克.你并不清楚每个砝码的重量,但你知道其中一些砝码重量的大小关系.你把其中两个砝码A 和B 放在天平的左边,需要另外选出两个砝码放在天平的右边.问:有多少种 ...
- [SCOI2008]天平 差分约束
---题面--- 题解: 差分约束学得实在是太烂了,,,,QAQ 这里先记下: a - b >= x ---> a >= b + x ----> b - ...
- 2021.07.19 P2294 狡猾的商人(差分约束)
2021.07.19 P2294 狡猾的商人(差分约束) [P2294 HNOI2005]狡猾的商人 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) 重点: 1.差分约束最长路与最短 ...
- 【BZOJ1077】天平(差分约束)
[BZOJ1077]天平(差分约束) 题面 BZOJ 洛谷 题解 利用矩阵可以很容易得到两个点之间的最大差和最小差,再利用这个信息判断即可.差分约束用\(Floyd\)计算.时间复杂度\(O(n^3) ...
- 2021.08.16 P1260 工程规划(差分约束)
2021.08.16 P1260 工程规划(差分约束) 重点: 1.跑最短路是为了满足更多约束条件. P1260 工程规划 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) 题意: 造 ...
- [luogu2474 SCOI2008]天平(floyd差分约束)
传送门 Solution 由于重量只有三种情况,那么想到用差分约束. 由于范围比较小,想到可以floyed求差分约束,暴力求天平另一边 Code #include <cstdio> #in ...
- 洛谷 P7515 - [省选联考 2021 A 卷] 矩阵游戏(差分约束)
题面传送门 emmm--怎么评价这个题呢,赛后学完差分约束之后看题解感觉没那么 dl,可是现场为啥就因为种种原因想不到呢?显然是 wtcl( 先不考虑"非负"及" \(\ ...
- UVA 11478 Halum(用bellman-ford解差分约束)
对于一个有向带权图,进行一种操作(v,d),对以点v为终点的边的权值-d,对以点v为起点的边的权值+d.现在给出一个有向带权图,为能否经过一系列的(v,d)操作使图上的每一条边的权值为正,若能,求最小 ...
随机推荐
- Rsync反弹shell
vulhub环境靶机 : 192.168.91.130 攻击机:kali 192.168.91.128 一.环境搭建 vulhub环境靶机环境搭建 在纯净ubuntu中部署vulhub环境: 1. ...
- 从HDFS的写入和读取中,我发现了点东西
摘要:从HDFS的写入和读取中,我们能学习到什么? 本文分享自华为云社区<从HDFS的写入和读取中,我们能学习到什么>,作者: breakDawn . 最近开发过程涉及了一些和文件读取有关 ...
- python3 爬虫6--requests的使用(1)
1用requests进行网页请求与urlopen差不多,这里省略不说 2抓取网页的学习 import requests import re headers={'User-Agent': 'Mozill ...
- idea如何打包项目,部署到linux后台运行
服务器安装tomcat 上传好tomcat包 scp -r tomcat liwwww@111116.11222.101121.12111111:/opt/ linux下启动tomcat服务的命令 ...
- Zookeeper 文件系统 ?
Zookeeper 提供一个多层级的节点命名空间(节点称为 znode).与文件系统不 同的是,这些节点都可以设置关联的数据,而文件系统中只有文件节点可以存放 数据而目录节点不行. Zookeeper ...
- 说说 Redis 哈希槽的概念?
Redis 集群没有使用一致性 hash,而是引入了哈希槽的概念,Redis 集群有 16384 个哈希槽,每个 key 通过 CRC16 校验后对 16384 取模来决定放置哪个槽, 集群的每个节点 ...
- Spring 支持的 ORM?
Spring 支持以下 ORM:HibernateiBatisJPA (Java Persistence API)TopLinkJDO (Java Data Objects)OJB
- WSGI是个啥?大白话告诉你wsgi做了什么!
定义: 官方定义:wsgi是Web服务器网关接口(Python Web Server Gateway Interface,缩写为WSGI)是为Python语言定义的Web服务器和Web应用程序或框架之 ...
- js技术之运用"typeof()"运算符校验变量类型
一.简介 typeof();个人的理解就是可以判断出对应的变量类型,而且是用统一的类型 如:数字,小数等..... 都用Number来表示 而:所有对象都用object表示 二.探索到 typeof的 ...
- PCB基础知识(一)
在电子行业有一个关键的部件叫做PCB(printed circuit board,印刷电路板).这是一个太基础的部件,导致很多人都很难解释到底什么是PCB.这篇文章将会详细解释PCB的构成,以及在PC ...