当前位置: 首页 > news >正文

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,0,sizeof(dis));
    for(i=0;i<=n;i++)   //n+1个节点
    {
        for(j=0;j<=n;j++)
        {
            for(k=head[j];k!=-1;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=0;j<=n;j++)
    {
        for(k=head[j];k!=-1;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[5];
    while(scanf("%d",&n)!=EOF && n)
    {
        scanf("%d",&m);
        tot = 1;
        memset(head,-1,sizeof(head));
        for(i=0;i<m;i++)
        {
            scanf("%d%d%s%d",&u,&v,ss,&w);
            if(ss[0] == 'g')
                addedge(u+v,u-1,-w-1);
            else
                addedge(u-1,u+v,w-1);
        }
        if(!Bellman_Ford())
            puts("successful conspiracy");
        else
            puts("lamentable kingdom");
    }
    return 0;
}
View Code

 

 

转载于:https://www.cnblogs.com/whatbeg/p/3781909.html

相关文章:

  • Gradle 5.0 正式版发布
  • STM32 外扩 SRAM
  • 当前佛教界的乱相之一就是以凡滥圣、惑乱人心
  • Redis 集群管理常见操作
  • 关于cxf生成客户端代码中的JAXBElementString
  • (转)Linux下编译安装log4cxx
  • Spring上传多文件并供下载
  • 解决Android LogCat 输出乱码的问题(转)
  • 原有vue项目接入typescript
  • Android软件开发-AnalogClock、DigitalClock
  • springboot分环境打包(maven动态选择环境)
  • CSS3 动画效果带来的bug
  • PI Square中文论坛: PI SDK 开发中级篇| PI Square
  • 解密回文——栈
  • Maven Docker部署
  • [译]Python中的类属性与实例属性的区别
  • 【EOS】Cleos基础
  • 【从零开始安装kubernetes-1.7.3】2.flannel、docker以及Harbor的配置以及作用
  • AHK 中 = 和 == 等比较运算符的用法
  • iOS 颜色设置看我就够了
  • maya建模与骨骼动画快速实现人工鱼
  • MySQL数据库运维之数据恢复
  • Netty 框架总结「ChannelHandler 及 EventLoop」
  • PAT A1120
  • Redis 懒删除(lazy free)简史
  • 从零开始的webpack生活-0x009:FilesLoader装载文件
  • 分布式事物理论与实践
  • 排序(1):冒泡排序
  • 前端
  • 如何选择开源的机器学习框架?
  • 手机app有了短信验证码还有没必要有图片验证码?
  • 在Mac OS X上安装 Ruby运行环境
  • 【云吞铺子】性能抖动剖析(二)
  • 正则表达式-基础知识Review
  • !$boo在php中什么意思,php前戏
  • #define 用法
  • (4)logging(日志模块)
  • (js)循环条件满足时终止循环
  • (剑指Offer)面试题41:和为s的连续正数序列
  • (三)centos7案例实战—vmware虚拟机硬盘挂载与卸载
  • (一)Thymeleaf用法——Thymeleaf简介
  • (已更新)关于Visual Studio 2019安装时VS installer无法下载文件,进度条为0,显示网络有问题的解决办法
  • (转)Windows2003安全设置/维护
  • (转)编辑寄语:因为爱心,所以美丽
  • .NET Core Web APi类库如何内嵌运行?
  • .NET Core工程编译事件$(TargetDir)变量为空引发的思考
  • .Net Core与存储过程(一)
  • .NET6实现破解Modbus poll点表配置文件
  • .NET建议使用的大小写命名原则
  • .NET学习教程二——.net基础定义+VS常用设置
  • .vue文件怎么使用_vue调试工具vue-devtools的安装
  • @Autowired和@Resource的区别
  • @private @protected @public
  • [AX]AX2012开发新特性-禁止表或者表字段
  • [bzoj1038][ZJOI2008]瞭望塔