2788: [Poi2012]Festival

Time Limit: 30 Sec  Memory Limit: 64 MB
Submit: 187  Solved: 91
[Submit][Status][Discuss]

Description

有n个正整数X1,X2,...,Xn,再给出m1+m2个限制条件,限制分为两类:

1. 给出a,b (1<=a,b<=n),要求满足Xa + 1 = Xb

2. 给出c,d (1<=c,d<=n),要求满足Xc <= Xd

在满足所有限制的条件下,求集合{Xi}大小的最大值。

Input

第一行三个正整数n, m1, m2 (2<=n<=600, 1<=m1+m2<=100,000)。

接下来m1行每行两个正整数a,b (1<=a,b<=n),表示第一类限制。

接下来m2行每行两个正整数c,d (1<=c,d<=n),表示第二类限制。

Output

一个正整数,表示集合{Xi}大小的最大值。

如果无解输出NIE。

Sample Input

4 2 2

1 2

3 4

1 4

3 1

Sample Output

3

HINT

|X3=1, X1=X4=2, X2=3

这样答案为3。容易发现没有更大的方案。

Source

[Submit][Status][Discuss]

此题显然是个差分约束系统,先建好图。

如果两个点不是强连通的,显然这两个点不会互相影响。

所以先tarjan缩点,如果不在一个强连通块里的不会有影响,所以只需要考虑同意连通块内的点。

求元素不同的最大值等价于连通块内的最长路+1,由于数据范围较小,floyd即可。

如果存在正环,则 无解。

 #include<cstdio>
#include<algorithm>
#define N 605
#define M 500010
using namespace std;
int head[N],dfn[N],belong[N],low[N],scc;
int map[N][N],q[N],top,tot,n,m1,m2,id,ans;
bool vis[N];
struct edge{int next,to;}e[M];
#define add(u,v) e[++tot]=(edge){head[u],v},head[u]=tot
void tarjan(int x)
{
low[x]=dfn[x]=++id;
q[++top]=x;vis[x]=;
for(int i=head[x];i;i=e[i].next)
if(!dfn[e[i].to])
tarjan(e[i].to),low[x]=min(low[x],low[e[i].to]);
else if(vis[e[i].to])
low[x]=min(low[x],dfn[e[i].to]);
int now=;
if(low[x]==dfn[x])
{
scc++;
while(now!=x)
{
now=q[top--];
belong[now]=scc;
vis[now]=;
}
}
}
int main()
{
scanf("%d%d%d",&n,&m1,&m2);
for(int i=;i<=n;i++)
for(int j=;j<=n;j++)
if(i!=j)map[i][j]=-1e9;
else map[i][j]=;
int x,y;
while(m1--)
{
scanf("%d%d",&x,&y);
add(x,y);
add(y,x);
map[x][y]=max(map[x][y],);
map[y][x]=max(map[y][x],-);
}
while(m2--)
{
scanf("%d%d",&x,&y);
add(x,y);
map[x][y]=max(map[x][y],);
}
for(int i=;i<=n;i++)
if(!dfn[i])tarjan(i);
for(int p=;p<=scc;p++)
{
for(int k=;k<=n;k++)if(belong[k]==p)
for(int i=;i<=n;i++)if(belong[i]==p)
if(map[i][k]!=-1e9)
for(int j=;j<=n;j++)if(belong[j]==p)
if(map[k][j]!=-1e9)
map[i][j]=max(map[i][j],map[i][k]+map[k][j]);
int now=;
for(int i=;i<=n;i++)if(belong[i]==p)
for(int j=;j<=n;j++)if(belong[j]==p)
now=max(now,abs(map[i][j]));
ans+=now+;
}
for(int i=;i<=n;i++)
if(map[i][i]!=)
return puts("NIE"),;
printf("%d",ans);
}

[BZOJ2788][Poi2012]Festival的更多相关文章

  1. [Poi2012]Festival 题解

    [Poi2012]Festival 时间限制: 1 Sec  内存限制: 64 MB 题目描述 有n个正整数X1,X2,...,Xn,再给出m1+m2个限制条件,限制分为两类: 1. 给出a,b (1 ...

  2. 【bzoj2788】Festival

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

  3. [Poi2012]Festival 差分约束+tarjan

    差分约束建图,发现要在每个联通块里求最长路,600,直接O(n3) floyed #include<cstdio> #include<cstring> #include< ...

  4. [POI2012]Festival

    题目大意: 有$n$个正整数$x_1,x_2,\ldots,x_n$,再给出一些限制条件,限制条件分为两类: 1.给出$A,B$,要求满足$X_A+1=X_B$: 2.给出$C,D$,要求满足$X_C ...

  5. bzoj 2788 [Poi2012]Festival 差分约束+tarjan+floyd

    题目大意 有n个正整数X1,X2,...,Xn,再给出m1+m2个限制条件,限制分为两类: 1.给出a,b (1<=a,b<=n),要求满足Xa + 1 = Xb 2.给出c,d (1&l ...

  6. POI2012题解

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

  7. Noip前的大抱佛脚----赛前任务

    赛前任务 tags:任务清单 前言 现在xzy太弱了,而且他最近越来越弱了,天天被爆踩,天天被爆踩 题单不会在作业部落发布,所以可(yi)能(ding)会不及时更新 省选前的练习莫名其妙地成为了Noi ...

  8. bzoj AC倒序

    Search GO 说明:输入题号直接进入相应题目,如需搜索含数字的题目,请在关键词前加单引号 Problem ID Title Source AC Submit Y 1000 A+B Problem ...

  9. 2795: [Poi2012]A Horrible Poem

    2795: [Poi2012]A Horrible Poem Time Limit: 50 Sec  Memory Limit: 128 MBSubmit: 484  Solved: 235[Subm ...

随机推荐

  1. 重温WCF之WCF抛出异常的处理SOAP Fault(十二)

    1.(服务端)抛出和(客户端)捕获SOAP Fault 当我们需要客户端获取到WCF服务端的抛出的异常的时候,使用FaultException类 WCF类库在System.ServiceModel命名 ...

  2. 回溯法解决N皇后问题(以四皇后为例)

    以4皇后为例,其他的N皇后问题以此类推.所谓4皇后问题就是求解如何在4×4的棋盘上无冲突的摆放4个皇后棋子.在国际象棋中,皇后的移动方式为横竖交叉的,因此在任意一个皇后所在位置的水平.竖直.以及45度 ...

  3. EF环境搭建碰到的问题

    研究EF Code Frist安装Entity Framework的时候,遇到了一些问题,下面就描述一下这些问题,顺便附上问题的解决办法. 1.Nuget安装EF的时候,一直报错,解决的办法是,卸载N ...

  4. [LeetCode] Letter Combinations of a Phone Number

    Given a digit string, return all possible letter combinations that the number could represent. A map ...

  5. HTTPCLIENT 学习 (1) 入门

    早就如雷贯耳它的大名,却一直不曾相见,昨天下载下来,今天终于测试了一把,用的官网的QUICK START例子,来访问我自己以前开发过的WEB程序,因为这个网站恰好有一个写好的通过POST请求验证用户名 ...

  6. maven错误解决一:Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:2.5.1:compile (default-compile)

    解决方法是将 jre的目录在 window->Preferences 里修改java installed里的jre目录改为jdk目录即可. 原因是在jre目录下不存在tools.jar.

  7. Parallel.js初探续集

    @author mrbean 例子均来源于github parallel.js 昨天写的第一篇今天一看居然有50+的阅读量了,感觉很激动啊,但是也有点害怕毕竟这只是自己笔记性质的一点东西,所以赶紧拿起 ...

  8. ML 07、机器学习中的距离度量

    机器学习算法 原理.实现与实践 —— 距离的度量 声明:本篇文章内容大部分转载于July于CSDN的文章:从K近邻算法.距离度量谈到KD树.SIFT+BBF算法,对内容格式与公式进行了重新整理.同时, ...

  9. 2016 ACM/ICPC Asia Regional Dalian Online HDU 5877 Weak Pair treap + dfs序

    Weak Pair Problem Description   You are given a rooted tree of N nodes, labeled from 1 to N. To the  ...

  10. loj 1037(状压dp)

    题目链接:http://acm.hust.edu.cn/vjudge/problem/viewProblem.action?id=25914 思路:dp[state]表示当前状态下要消耗的最小的sho ...