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
    《算法
    《Redis
    《Mysql
    《Mysql
    SSH免密码登录
    TCP/IP四层模型和OSI七层模型的概念
    简单描述RAID级别:
    awk内置变量 awk有许多内置变量用来设置环境信息,这些变量可以被改变,下面给出了最常用的一些变量。
    awk 的逻辑运算字符
  • 原文地址:https://www.cnblogs.com/jizhihong/p/13337362.html
Copyright © 2011-2022 走看看