• 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;
    }
    
  • 相关阅读:
    清北学堂模拟赛d6t1 角谷猜想
    清北学堂模拟赛d4t1 a
    清北学堂模拟赛d3t6 c
    清北学堂模拟赛d3t5 c
    清北学堂模拟赛d3t4 a
    清北学堂模拟赛d3t3 c
    清北学堂模拟赛d3t1 a
    清北学堂模拟赛d2t3 逆序对(pair)
    Android(java)学习笔记176: 远程服务的应用场景(移动支付案例)
    Android(java)学习笔记175:Android进程间通讯(IPC)之AIDL
  • 原文地址:https://www.cnblogs.com/jizhihong/p/13337362.html
Copyright © 2020-2023  润新知