POJ 1364 King --差分约束第一题
题意:求给定的一组不等式是否有解,不等式要么是:SUM(Xi) (a<=i<=b) > k (1) 要么是 SUM(Xi) (a<=i<=b) < k (2)
分析:典型差分约束题,变换,令Ti = SUM(Xj) (0<=j<=i). 则表达式(1)可以看做T(a+b)-T(a-1) > k,也就是T(a-1)-T(a+b) < -k,又因为全是整数,所以T(a-1)-T(a+b) <= -k-1. 同理,(2)看做T(a+b)-T(a-1) <= k-1.这样就化成了差分约束系统的题了。
在差分约束系统中,Xi - Xj <= K 的表达式建边为 <Xj,Xi> = K.
不存在这个序列的情况即为出现负环,所以这题建图后只需判断有无负环即可。这里用Bellman-Ford算法判负环
注意:
(1)a-1有可能为0,a+b有可能为n,所以如果按顶点来遍历边的话有n+1个顶点(0~n)。
(2)建的图可能不连通,可以通过附加点来使图联通,即令dis[] = {0}。相当于每个点都与一个附加点Vs相连,且边权为0.
代码:
#include <iostream>
#include <cstdio>
#include <cstring>
#include <cmath>
#include <algorithm>
#define Mod 1000000007
using namespace std;
#define N 107 struct Edge
{
int v,next,w;
}G[N];
int head[N],tot;
int dis[N];
int n,m; void addedge(int u,int v,int w)
{
G[tot].v = v;
G[tot].w = w;
G[tot].next = head[u];
head[u] = tot++;
} bool Bellman_Ford()
{
int i,j,k;
memset(dis,,sizeof(dis));
for(i=;i<=n;i++) //n+1个节点
{
for(j=;j<=n;j++)
{
for(k=head[j];k!=-;k=G[k].next)
{
int v = G[k].v;
int w = G[k].w;
if(dis[v] > dis[j] + w)
dis[v] = dis[j] + w;
}
}
}
for(j=;j<=n;j++)
{
for(k=head[j];k!=-;k=G[k].next)
{
int v = G[k].v;
int w = G[k].w;
if(dis[v] > dis[j] + w)
return false;
}
}
return true;
} int main()
{
int u,v,w,i;
char ss[];
while(scanf("%d",&n)!=EOF && n)
{
scanf("%d",&m);
tot = ;
memset(head,-,sizeof(head));
for(i=;i<m;i++)
{
scanf("%d%d%s%d",&u,&v,ss,&w);
if(ss[] == 'g')
addedge(u+v,u-,-w-);
else
addedge(u-,u+v,w-);
}
if(!Bellman_Ford())
puts("successful conspiracy");
else
puts("lamentable kingdom");
}
return ;
}
POJ 1364 King --差分约束第一题的更多相关文章
- [poj 1364]King[差分约束详解(续篇)][超级源点][SPFA][Bellman-Ford]
题意 有n个数的序列, 下标为[1.. N ], 限制条件为: 下标从 si 到 si+ni 的项求和 < 或 > ki. 一共有m个限制条件. 问是否存在满足条件的序列. 思路 转化为差 ...
- poj 1364 King(差分约束)
题目:http://poj.org/problem?id=1364 #include <iostream> #include <cstdio> #include <cst ...
- poj 1201 Intervals——差分约束裸题
题目:http://poj.org/problem?id=1201 差分约束裸套路:前缀和 本题可以不把源点向每个点连一条0的边,可以直接把0点作为源点.这样会快许多! 可能是因为 i-1 向 i 都 ...
- poj 3169 Layout 差分约束模板题
Layout Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 6415 Accepted: 3098 Descriptio ...
- POJ——3169Layout(差分约束)
POJ——3169Layout Layout Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 14702 Accepted ...
- POJ 1364 King (UVA 515) 差分约束
http://poj.org/problem?id=1364 http://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemi ...
- poj 1364 King(差分约束)
题意(真坑):傻国王只会求和,以及比较大小.阴谋家们想推翻他,于是想坑他,上交了一串长度为n的序列a[1],a[2]...a[n],国王作出m条形如(a[si]+a[si+1]+...+a[si+ni ...
- POJ 1364 King (差分约束)
King Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 8660 Accepted: 3263 Description ...
- poj 3159(差分约束经典题)
题目链接:http://poj.org/problem?id=3159思路:题目意思很简单,都与给定的条件dist[b]-dist[a]<=c,求dist[n]-dist[1]的最大值,显然这是 ...
随机推荐
- javascript 之拼接html字符串
// var one = {"id":1, "leasetime":2, "ney":0,"myhuifangshi": ...
- 使用正则表达式获取Sql查询语句各项(表名、字段、条件、排序)
string text = "select * from [admin] where aa=1 and cc='b' order by aa desc "; Regex reg = ...
- javascript --- Ajax基础
神马是Ajax? Ajax即‘Asynchronous javascript and XML’(异步javascript和XML),也就是所谓的无刷新页面读取技术. http请求 首先要了解http请 ...
- DataTable 转换为ArrayList 再转换成 json 格式
//JavaScriptSerializer javaScriptSerializer = new JavaScriptSerializer(); //javaScriptSeriali ...
- JSP--JavaBean
JSP 最强有力的一个方面就是能够使用 JavaBean 组件. 按照 Sun 公司的定义, JavaBean是一个可重复使用的软件组件.实际上 JavaBean 是一种 Java 类,通过封装属性和 ...
- STL--双端队列(deque)和链表(list)
双端队列(deque容器类): #include<deque>与vector 类似,支持随机访问和快速插入删除,它在容器中某一位置上的操作所花费的是线性时间. 与vector不同的是:de ...
- 安卓第十三天笔记-服务(Service)
安卓第十三天笔记-服务(Service) Servcie服务 1.服务概念 服务 windows 服务没有界面,一直运行在后台, 运行在独立的一个进程里面 android 服务没有界面,一直运行在后台 ...
- macbook pro 重装系统
重装前系统版本:10.11.6 因为我在系统更新时强行关机,后来在编译代码的时候就一直有奇怪的错误,所以选择重装系统. 前提条件:一定要有网络 1.关机状态下按住command + r ,按一下开机键 ...
- SQL - 生成指定范围内的随机数
今天按照公司需求,需要做一个sql作业来对数据库定时触发,其中有个难点,就是在sql中需要在1-n中随机出来一个结果. google了半天,找到一个比较好的方式. 写下这个sql: DECLARE @ ...
- Memcache笔记04-Memcached机制深入了解
Memcached机制深入了解 ①基于c/s架构 ,协议简单 c/s架构,此时memcached为服务器端,我们可以使用如PHP,c/c++等程序连接memcached服务器. memcached的服 ...