题面

点此看题

没有永远的朋友,只有永远的利益

在这个黑漆漆的社会上,有

n

n

n 个布衣百姓,他们在利益驱使下成为金钱的奴隶,看不到属于生活的阳光。在茫茫奔途中,他们相互扶持,结交了有

m

m

m 对朋友关系。

奈何这是个资本主义社会,虽然这

n

n

n 个人没有人失业,每个人分别有

a

i

a_i

ai​ 的月薪,但是如果两个人

i

,

j

i,j

i,j 满足

a

j

=

a

i

+

1

a_j=a_i+1

aj​=ai​+1 ,也就是说

j

j

j 的月薪刚好比

i

i

i 的大 1,那么

i

i

i 就会觊觎

j

j

j 的成功。

每一对朋友关系中,总有一个人觊觎另一个人,明里交好,暗里嫉妒。

这个社会的收入不平等度定义为

max

a

i

min

a

i

\max a_i-\min a_i

maxai​−minai​ 。目前已知所有的朋友关系,和部分朋友关系中的嫉妒方向,以及一个范围:

0

a

i

1

0

6

0\leq a_i\leq 10^6

0≤ai​≤106 。没错,在利益驱使的剥削下,有的人的月薪可以达到 0 。事实上,这算比较幸运的。

也就是你,看透了这个社会的弊病,大呼着“生活万岁”,把迷茫走失的人们拉回正轨。为了详细地了解这个社会,你打算:求出最大可能的收入不平等度,以及此时可能的每个人的月薪是多少。可能无解。

1

n

200

,

n

1

m

2

000

1\leq n\leq 200,n-1\leq m\leq2\,000

1≤n≤200,n−1≤m≤2000 .

输入

第一行两个数

n

,

m

n,m

n,m。

接下来

m

m

m 行,每行三个数

i

,

j

,

b

i,j,b

i,j,b ,表示

i

,

j

i,j

i,j 之间有朋友关系。

b

{

0

,

1

}

b\in\{0,1\}

b∈{0,1} ,如果

b

=

1

b=1

b=1 ,则

i

i

i 是嫉妒

j

j

j 的(

a

j

=

a

i

+

1

a_j=a_i+1

aj​=ai​+1),如果

b

=

0

b=0

b=0 ,则两个人的嫉妒方向不确定。

保证不存在重复的

(

i

,

j

)

(i,j)

(i,j),假设每个朋友关系是条无向边,那么这保证是个连通图。

题解

正解是差分约束,想不到?其实应该比较明显的,反正我想不到。

两种情况,两种连边:

  • b

    =

    1

    b=1

    b=1 :是一个相等关系

    a

    j

    =

    a

    i

    +

    1

    a_j=a_i+1

    aj​=ai​+1 ,我们把它拆成

    a

    j

    a

    i

    +

    1

    a_j\leq a_i+1

    aj​≤ai​+1 和

    a

    i

    a

    j

    1

    a_i\leq a_j-1

    ai​≤aj​−1 。

  • b

    =

    0

    b=0

    b=0 :即

    a

    i

    a

    j

    =

    1

    |a_i-a_j|=1

    ∣ai​−aj​∣=1 ,姑且先把它看作

    a

    i

    a

    j

    1

    |a_i-a_j|\leq 1

    ∣ai​−aj​∣≤1 ,然后转化为

    a

    j

    a

    i

    +

    1

    a_j\leq a_i+1

    aj​≤ai​+1 和

    a

    i

    a

    j

    +

    1

    a_i\leq a_j+1

    ai​≤aj​+1 。

然后跑

F

l

o

y

d

\rm Floyd

Floyd ,如果任意一个

f

i

,

i

<

0

f_{i,i}<0

fi,i​<0 ,说明有负环,则无解。

接下来找一个起点

i

i

i ,使得在满足

(

u

,

v

)

E

,

f

i

,

u

f

i

,

v

\forall (u,v)\in E~,~f_{i,u}\not=f_{i,v}

∀(u,v)∈E , fi,u​​=fi,v​ 以及

j

[

1

,

n

]

,

f

i

,

j

0

\forall j\in[1,n]~,~f_{i,j}\geq 0

∀j∈[1,n] , fi,j​≥0 的前提下,

max

f

i

,

.

.

.

min

f

i

,

.

.

.

\max f_{i,...}-\min f_{i,...}

maxfi,...​−minfi,...​ 最大。如果找不到这样的

i

i

i 则无解。找到这个

i

i

i 后,就令

a

j

=

f

i

,

j

a_j=f_{i,j}

aj​=fi,j​ 就是了。

最后对于第二种连边,有的人可能会问,没有强制不相等的情况下差分约束,会不会漏掉一些合法情况?实际上不会,如果存在一种情况使得

f

i

,

u

f

i

,

v

f_{i,u}\not=f_{i,v}

fi,u​​=fi,v​ 的话,由于差分约束的性质,因为我们没有连 0 边,一定能使其中一个更小。

CODE

#include<map>
#include<queue>
#include<cmath>
#include<vector>
#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
using namespace std;
#define MAXN 205
#define ENDL putchar('\n')
#define LL long long
#define DB double
#define lowbit(x) ((-x) & (x))
LL read() {
LL f = 1,x = 0;char s = getchar();
while(s < '0' || s > '9') {if(s=='-')f = -f;s = getchar();}
while(s >= '0' && s <= '9') {x=x*10+(s-'0');s = getchar();}
return f * x;
}
int n,m,i,j,s,o,k;
int ed[MAXN][MAXN];
int g[MAXN][MAXN];
int main() {
n = read();m = read();
for(int i = 1;i <= n;i ++) {
for(int j = 1;j <= n;j ++) g[i][j] = 1000000;
g[i][i] = 0;
}
for(int i = 1;i <= m;i ++) {
s = read();o = read();k = read();
if(k == 1) { // ai = aj-1 , aj <= ai+1 ^ ai <= aj-1
g[s][o] = 1; g[o][s] = -1;
}
else { // ai <= aj+1 ^ aj <= ai+1
g[s][o] = 1; g[o][s] = 1;
}
ed[s][o] = ed[o][s] = 1;
}
for(int k = 1;k <= n;k ++) {
for(int i = 1;i <= n;i ++) {
for(int j = 1;j <= n;j ++) {
g[i][j] = min(g[i][j],g[i][k] + g[k][j]);
}
}
}
for(int i = 1;i <= n;i ++) {
if(g[i][i] < 0) {
printf("NO\n");return 0;
}
}
int as = 0,ans = -1;
for(int i = 1;i <= n;i ++) {
bool flag = 1;
for(int s = 1;s <= n;s ++) {
for(int o = 1;o <= n;o ++) {
if(ed[s][o] && g[i][s] == g[i][o]) flag = 0;
}
}
if(!flag) continue;
int mi = 1000000,ma = 0;
for(int j = 1;j <= n;j ++) {
mi = min(mi,g[i][j]);
ma = max(ma,g[i][j]);
}
if(mi < 0) continue;
if(ans < ma-mi) {
ans = ma-mi; as = i;
}
}
if(!as) {printf("NO\n");return 0;}
printf("YES\n%d\n",ans);
for(int i = 1;i <= n;i ++) printf("%d ",g[as][i]);ENDL;
return 0;
}

CF1450E 资本主义Capitalism(差分约束)的更多相关文章

  1. Candies-POJ3159差分约束

    Time Limit: 1500MS Memory Limit: 131072K Description During the kindergarten days, flymouse was the ...

  2. poj3159 差分约束 spfa

    //Accepted 2692 KB 1282 ms //差分约束 -->最短路 //TLE到死,加了输入挂,手写queue #include <cstdio> #include & ...

  3. ZOJ 2770火烧连营——差分约束

    偶尔做了一下差分约束. 题目大意:给出n个军营,每个军营最多有ci个士兵,且[ai,bi]之间至少有ki个士兵,问最少有多少士兵. ---------------------------------- ...

  4. POJ 2983 Is the Information Reliable? 差分约束

    裸差分约束. //#pragma comment(linker, "/STACK:1024000000,1024000000") #include<cstdio> #i ...

  5. 2014 Super Training #6 B Launching the Spacecraft --差分约束

    原题:ZOJ 3668 http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=3668 典型差分约束题. 将sum[0] ~ sum ...

  6. POJ 1364 King --差分约束第一题

    题意:求给定的一组不等式是否有解,不等式要么是:SUM(Xi) (a<=i<=b) > k (1) 要么是 SUM(Xi) (a<=i<=b) < k (2) 分析 ...

  7. [USACO2005][POJ3169]Layout(差分约束)

    题目:http://poj.org/problem?id=3169 题意:给你一组不等式了,求满足的最小解 分析: 裸裸的差分约束. 总结一下差分约束: 1.“求最大值”:写成"<=& ...

  8. ShortestPath:Layout(POJ 3169)(差分约束的应用)

                布局 题目大意:有N头牛,编号1-N,按编号排成一排准备吃东西,有些牛的关系比较好,所以希望他们不超过一定的距离,也有一些牛的关系很不好,所以希望彼此之间要满足某个关系,牛可以 ...

  9. 【BZOJ】2330: [SCOI2011]糖果(差分约束+spfa)

    http://www.lydsy.com/JudgeOnline/problem.php?id=2330 差分约束运用了最短路中的三角形不等式,即d[v]<=d[u]+w(u, v),当然,最长 ...

随机推荐

  1. 使用 KubeKey 搭建 Kubernetes/KubeSphere 环境的"心路(累)历程"

    目录 今天要干嘛? 在哪里干? 从哪里开始干? 快速开干! 解决依赖问题再继续干! 如何干翻重来? 连着 KubeSphere 一起干! 干不过,输了. 重整旗鼓,继续干! 再次重整旗鼓,继续干! 一 ...

  2. 入坑KeePass(二)重置keepass设置

    保留好.kdbx和密钥文件,软件的文件可以删除掉,重新下载并解压设置就恢复默认了

  3. 如何在Vue项目中,通过点击DOM自动定位VScode中的代码行?

    作者:vivo 互联网大前端团队- Youchen 一.背景 现在大型的 Vue项目基本上都是多人协作开发,并且随着版本的迭代,Vue 项目中的组件数也会越来越多,如果此时让你负责不熟悉的页面功能开发 ...

  4. 如何安装TypeScript编译器?

    首先需要nodejs和npm工具.如果没有点击这里下载node(默认会附带安装npm工具):https://nodejs.org/en/ npm安装TypeScript npm install -g ...

  5. 1.Shell编程循环语句(if 、while、 until)

    循环语句 for循环语句 读取不同的变量值,用来逐个执行同一组命令 格式: for 变量名 in 取值列表 do 命令序列 done 示例:批量创建用户并设置密码 [root@localhost da ...

  6. 不花钱~Python制作视频解析免费追剧神器

    同学们在闲暇之余是否喜欢看电影或者电视剧呢? 今天带领大家使用python制作能免费追剧的桌面软件.还在等什么?发车了! 效果我就不再这里演示了https://jq.qq.com/?_wv=1027& ...

  7. JSP页面+请求转发+EL表达式

    1) JSP全称Java Server Pages,顾名思义就是运行在java服务器中的页面,也就是在我们JavaWeb中的动态页面,其本质就是一个Servlet.2) 其本身是一个动态网页技术标准, ...

  8. 泛型容器类和ArrayList操作

    泛型 比如ArrayList<E> E就是泛型 在没有泛型之前,从集合读取到的每一个对象都必须进行转换,如果有人不小心插入了类型错误的对象,在运行时的转换处理就会出错 有了泛型之后,可以告 ...

  9. 【RocketMQ】消息的拉取

    RocketMQ消息的消费以组为单位,有两种消费模式: 广播模式:同一个消息队列可以分配给组内的每个消费者,每条消息可以被组内的消费者进行消费. 集群模式:同一个消费组下,一个消息队列同一时间只能分配 ...

  10. Hadoop集群搭建(完全分布式版本) VMWARE虚拟机

    Hadoop集群搭建(完全分布式版本) VMWARE虚拟机 一.准备工作 三台虚拟机:master.node1.node2 时间同步 ntpdate ntp.aliyun.com 调整时区 cp /u ...