[BZOJ2788][Poi2012]Festival
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
1 2
3 4
1 4
3 1
Sample Output
HINT
|X3=1, X1=X4=2, X2=3
这样答案为3。容易发现没有更大的方案。
Source
此题显然是个差分约束系统,先建好图。
如果两个点不是强连通的,显然这两个点不会互相影响。
所以先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的更多相关文章
- [Poi2012]Festival 题解
[Poi2012]Festival 时间限制: 1 Sec 内存限制: 64 MB 题目描述 有n个正整数X1,X2,...,Xn,再给出m1+m2个限制条件,限制分为两类: 1. 给出a,b (1 ...
- 【bzoj2788】Festival
Portal --> bzoj2788 Description 有\(n\)个正整数\(X_1,X_2,...,X_n\),再给出\(m1+m2\)个限制条件,限制分为两类: 1.给出\(a,b ...
- [Poi2012]Festival 差分约束+tarjan
差分约束建图,发现要在每个联通块里求最长路,600,直接O(n3) floyed #include<cstdio> #include<cstring> #include< ...
- [POI2012]Festival
题目大意: 有$n$个正整数$x_1,x_2,\ldots,x_n$,再给出一些限制条件,限制条件分为两类: 1.给出$A,B$,要求满足$X_A+1=X_B$: 2.给出$C,D$,要求满足$X_C ...
- 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 ...
- POI2012题解
POI2012题解 这次的完整的\(17\)道题哟. [BZOJ2788][Poi2012]Festival 很显然可以差分约束建图.这里问的是变量最多有多少种不同的取值. 我们知道,在同一个强连通分 ...
- Noip前的大抱佛脚----赛前任务
赛前任务 tags:任务清单 前言 现在xzy太弱了,而且他最近越来越弱了,天天被爆踩,天天被爆踩 题单不会在作业部落发布,所以可(yi)能(ding)会不及时更新 省选前的练习莫名其妙地成为了Noi ...
- bzoj AC倒序
Search GO 说明:输入题号直接进入相应题目,如需搜索含数字的题目,请在关键词前加单引号 Problem ID Title Source AC Submit Y 1000 A+B Problem ...
- 2795: [Poi2012]A Horrible Poem
2795: [Poi2012]A Horrible Poem Time Limit: 50 Sec Memory Limit: 128 MBSubmit: 484 Solved: 235[Subm ...
随机推荐
- ODATA WEB API(一)---扩展使用
一.概述 时间也算充足,抽点时间总结下OData的常用的使用方式,开放数据协议(OData)是一个查询和更新数据的Web协议.OData应用了web技术如HTTP.Atom发布协议(AtomPub)和 ...
- 【Java EE 学习 20】【使用过滤器实现登陆验证、权限认证】【观察者模式和监听器(使用监听器实现统计在线IP、登录IP 、踢人功能)】
一.使用过滤器实现登录验证.权限认证 1.创建5张表 /*使用过滤器实现权限过滤功能*/ /**创建数据库*/ DROP DATABASE day20; CREATE DATABASE day20; ...
- OVER(PARTITION BY)函数用法
OVER(PARTITION BY)函数介绍 开窗函数 Oracle从8.1.6开始提供分析函数,分析函数用于计算基于组的某种聚合值,它和聚合函数的不同之处是:对于每个组返 ...
- SGU 275 To xor or not to xor 高斯消元求N个数中选择任意数XORmax
275. To xor or not to xor The sequence of non-negative integers A1, A2, ..., AN is given. You are ...
- Codeforces Beta Round #89 (Div. 2) E. Bertown roads(Tarjan、边双连通分量)
题目链接:http://codeforces.com/problemset/problem/118/E 思路:首先要判断图是否是边双连通,这个Tarjan算法可以判断,若low[v] > dfn ...
- Junit的简单使用
Junit是一个很好用的单元测试工具,下面是使用Junit来测试方法的简单案例: import java.util.ArrayList; import java.util.Iterator; impo ...
- Practical JAVA (四)异常处理
Practice 16~27 一 异常控制流(exceptional control flow)机制: try{ <block> } catch(<ExceptionClass> ...
- SoapUI接口测试之JDBC(三)
JDBC(Java Data Base Connectivity,java数据库连接)是一种用于执行SQL语句的Java API,可以为多种关系数据库提供统一访问,它由一组用java语言编写的类和接口 ...
- JAVA Day6
1.对象:用来描述客观事物的一个实体,由一组属性和方法组成 2.属性--对象具有的各种特征 *每个对象的每个属性都拥有特定值 *例如:张浩和李明的年龄.姓名不一样 3.方法--对象执行的操 ...
- springMVC 的工作原理和机制(转)
工作原理上面的是springMVC的工作原理图: 1.客户端发出一个http请求给web服务器,web服务器对http请求进行解析,如果匹配DispatcherServlet的请求映射路径(在web. ...