zoukankan      html  css  js  c++  java
  • POJ 1364/HDU1531 King (差分约束)

    POJ链接
    HDU链接

    题意:给一个长度为 n 的序列, 有 m 句判断的语句, 每句判断的语句的格式是 si, ni, oi, ki, 其中 oi 是字符串
    “gt” 表示 大于号( > ) , “lt” 表示 小于号( < ), 判断语句,表示从 si 位置开始 连续 ni 个数的和 大于(或小于) ki

    思路:每句判断语句就是一个不等式,但是差分约束能解决的是 >= 或 <=, 所以要改下,
    对于 a - b > 0 —> a - b >=1
    a - b < 0 —> a - b <= -1
    这里只要判断是否有解就好了

    想法:这题就比之前做的要轻松多了(还是错了几次

    #include <iostream>
    #include <cstdio>
    #include <cstdlib>
    #include <cstring>
    #include <algorithm>
    
    const int maxn = 200;
    const int inf = 0x3f3f3f3f;
    using namespace std;
    typedef long long ll;
    struct note{
        int u, v;
        int w;
    }e[maxn];
    int n, m;
    
    bool bellman(){//用这个,数据范围不大,第一次用, 简单
        int dis[maxn];
        for(int i=0; i<=n; i++)
            dis[i] = -inf;
        for(int i=1; i<=n; i++){
            for(int j=0; j<m; j++){
                int u = e[j].u, v = e[j].v, w = e[j].w;
                if(dis[v] < dis[u] + w){
                    dis[v] = dis[u] + w;
                }
            }
        }
        for(int j=0; j<m; j++){
            int u = e[j].u, v = e[j].v, w = e[j].w;
                if(dis[v] < dis[u] + w)
                    return false;
        }
        return true;
    }
    
    int main()
    {
        while(scanf("%d", &n) && n){
            scanf("%d", &m);
            for(int i=0; i<m; i++){
                int a, b, c;
                char str[10];
                scanf("%d%d%s%d", &a, &b, str, &c);
                if(str[0] == 'g'){
                    e[i].u = a-1;
                    e[i].v = a+b;
                    e[i].w = c+1;
                }
                else{
                    e[i].u = a+b;
                    e[i].v = a-1;
                    e[i].w = -c+1;
                }
            }
            if(bellman())
                printf("lamentable kingdom
    ");
            else
                printf("successful conspiracy
    ");
        }
        return 0;
    }
    
  • 相关阅读:
    互联网架构 高可用和高并发 (转)
    mysql数据库索引
    SQL小结
    limit小结
    JDK8 元空间
    OpenStack基础知识
    shell 发送所有内容到会话
    通过word给博客园发布文章教程
    centos7.4安装过程
    Zabbix 调整告警发送的内容格式
  • 原文地址:https://www.cnblogs.com/jizhihong/p/13337362.html
Copyright © 2011-2022 走看看