明显是一个差分约束系统

对于第一种限制,其实就是x[a]+1<=x[b] x[b]-1<=x[a]

根据三角不等式很容易建图

但这题他比较奇怪,问的是X最多不同取值的个数

根据这张图的特殊性我们不难发现,两个强联通分量内X的取值种类是互不干涉的

也就是说我们可以分别统计每个强联通分量然后累计即可

为什么这样呢?观察这个限制,两个强联通分量之间只可能存在第二种限制的单向边,xc<=xd 显然xc,xd可以取不同取值

怎么统计强联通分量内的答案呢?

首先对于差分约束系统的可行解是最长路,每块的答案就是点与点之间距离绝对值的最大值

注意无解就是存在正环

 const inf=;
type node=record
po,next:longint;
end; var e:array[..] of node;
st,q,p,dfn,low:array[..] of longint;
d:array[..,..] of longint;
v,f:array[..] of boolean;
h,s,ans,x,y,len,j,t,i,n,m1,m2:longint; procedure max(var a:longint;b:longint);
begin
if b>a then a:=b;
end; function min(a,b:longint):longint;
begin
if a>b then exit(b) else exit(a);
end; procedure add(x,y:longint);
begin
inc(len);
e[len].po:=y;
e[len].next:=p[x];
p[x]:=len;
end; procedure floyd;
var i,j,k:longint;
begin
for k:= to s do
for i:= to s do
if d[q[i],q[k]]>-inf then
for j:= to s do
if d[q[k],q[j]]>-inf then
max(d[q[i],q[j]],d[q[i],q[k]]+d[q[k],q[j]]);
for i:= to s do
if d[q[i],q[i]]> then
begin
writeln('NIE');
halt;
end; k:=;
for i:= to s do
for j:= to s do
if d[q[i],q[j]]>-inf then max(k,abs(d[q[i],q[j]]));
ans:=ans+k+;
end; procedure dfs(x:longint);
var i,y:longint;
begin
inc(h);
dfn[x]:=h;
low[x]:=h;
v[x]:=true;
inc(t);
st[t]:=x;
f[x]:=true;
i:=p[x];
while i<> do
begin
y:=e[i].po;
if not v[y] then
begin
dfs(y);
low[x]:=min(low[x],low[y]);
end
else if f[y] then low[x]:=min(low[x],low[y]);
i:=e[i].next;
end;
if dfn[x]=low[x] then
begin
s:=;
while st[t+]<>x do
begin
inc(s);
q[s]:=st[t];
f[st[t]]:=false;
dec(t);
end;
floyd;
end;
end; begin
readln(n,m1,m2);
for i:= to n do
for j:= to n do
if i<>j then d[i,j]:=-inf;
for i:= to m1 do
begin
readln(x,y);
add(x,y);
add(y,x);
max(d[x,y],);
max(d[y,x],-);
end;
for i:= to m2 do
begin
readln(x,y);
add(x,y);
max(d[x,y],);
end;
for i:= to n do
if not v[i] then
begin
h:=;
t:=;
dfs(i);
end; writeln(ans);
end.

bzoj2788的更多相关文章

  1. 【bzoj2788】Festival

    Portal --> bzoj2788 Description 有\(n\)个正整数\(X_1,X_2,...,X_n\),再给出\(m1+m2\)个限制条件,限制分为两类: 1.给出\(a,b ...

  2. [BZOJ2788][Poi2012]Festival

    2788: [Poi2012]Festival Time Limit: 30 Sec  Memory Limit: 64 MBSubmit: 187  Solved: 91[Submit][Statu ...

  3. POI2012题解

    POI2012题解 这次的完整的\(17\)道题哟. [BZOJ2788][Poi2012]Festival 很显然可以差分约束建图.这里问的是变量最多有多少种不同的取值. 我们知道,在同一个强连通分 ...

随机推荐

  1. c# 重载运算符(+-|&)和扩展方法

    通常我们需要对class的相加,相减,相乘 等重载以适应需求, 如caml查询的时候,我们可以定义一个caml类,然后来操作这些查询. 首先,我们定义一个class为Test public class ...

  2. axure7.0 汉化包下载

    下载地址:http://files.cnblogs.com/files/feijian/axure7.0%E4%B8%AD%E6%96%87%E8%AF%AD%E8%A8%80%E6%B1%89%E5 ...

  3. JS中的className含义

    问题描述:     JS中的className含义 问题解决:     className说明:         className属性可以设置和返回元素的class属性 可以有两种方法来获取对象的c ...

  4. Codeforces Round #241 (Div. 2)->B. Art Union

    B. Art Union time limit per test 1 second memory limit per test 256 megabytes input standard input o ...

  5. PHP开发框架[国内框架]

    1.Thinkphp  http://thinkphp.cn/ 2.Brophp   http://www.brophp.com/zf/ 由LAMP兄弟连打造 3.WindFramework http ...

  6. truncate、drop、delete区别

    速度:drop>truncate>delete 1.TRUNCATE TABLE 在功能上与不带 WHERE 子句的 DELETE 语句相同:二者均删除表中的全部行.但 TRUNCATE ...

  7. [转]ubuntu server:开机自动登录

    原文链接: Ed29.com http://ed29.com/ubuntu%E6%9C%8D%E5%8A%A1%E5%99%A8%E8%87%AA%E5%8A%A8%E7%99%BB%E5%BD%95 ...

  8. lintcode 中等题:Submatrix sum is 0 和为零的子矩阵

    和为零的子矩阵 给定一个整数矩阵,请找出一个子矩阵,使得其数字之和等于0.输出答案时,请返回左上数字和右下数字的坐标. 样例 给定矩阵 [ [1 ,5 ,7], [3 ,7 ,-8], [4 ,-8 ...

  9. lintcode:合并排序数组

    题目: 合并排序数组 合并两个排序的整数数组A和B变成一个新的数组. 样例 给出A=[1,2,3,4],B=[2,4,5,6],返回 [1,2,2,3,4,4,5,6] 挑战 你能否优化你的算法,如果 ...

  10. Linux文件系统介绍

    1.ext2/ext3(日志功能)文件系统(Linux标准文件系统.一种索引式文件系统) SuperBlock:Superblock是记录整个filesystem 相关信息的地方,没有Superblo ...