美文网首页信息学竞赛题解(IO题解)
1202: [HNOI2005]狡猾的商人(差分约束)

1202: [HNOI2005]狡猾的商人(差分约束)

作者: AmadeusChan | 来源:发表于2018-10-17 12:06 被阅读1次

题目:http://www.lydsy.com/JudgeOnline/problem.php?id=1202

据说这道题可以用并查集来做,但是太神奇我太弱不会,就只能水水的用差分约束水过去了。

令账目的前缀和为pre[],那么对于每一个信息pre[t]-pre[s-1]=v

即pre[t]-pre[s-1]<=v&&pre[t]-pre[s-1]>=v,然后就SPFA来搞差分约束就可以拉。

代码:

#include <cstdio>
#include <algorithm>
#include <cstring>
#include <stack>
 
using namespace std ;
 
#define MAXN 110
 
struct edge {
    edge *next ;
    int t , d ;
} *head[ MAXN ] ;
 
void AddEdge( int s , int t , int d ) {
    edge *p = new( edge ) ;
    p -> t = t , p -> d = d , p -> next = head[ s ]    ;
    head[ s ] = p ;
}
 
int n , m , w ;
 
stack < int > S ;
int dist[ MAXN ] , cnt[ MAXN ] ;
bool f[ MAXN ] ;
 
bool spfa(  ) {
    while ( ! S.empty(  ) ) S.pop(  ) ;
    for ( int i = 0 ; i <= n ; i ++ ) dist[ i ] = 0 , cnt[ i ] = 1 , S.push( i ) ;
    memset( f , true , sizeof( f ) ) ;
    while ( ! S.empty(  ) ) {
        int v = S.top(  ) ; S.pop(  ) , f[ v ] = false ;
        for ( edge *p = head[ v ] ; p ; p = p -> next ) if ( dist[ p -> t ] > dist[ v ] + p -> d ) {
            if ( ( ++ cnt[ p -> t ] ) > n + 1 ) return false ;
            dist[ p -> t ] = dist[ v ] + p -> d ;
            if ( ! f[ p -> t ] ) f[ p -> t ] = true , S.push( p -> t ) ;
        }
    }
    return true ;
}
 
int main(  ) {
    scanf( "%d" , &w ) ;
    while ( w -- ) {
        memset( head , 0 , sizeof( head ) ) ;
        scanf( "%d%d" , &n , &m ) ;
        while ( m -- ) {
            int s , t , v ; scanf( "%d%d%d" , &s , &t , &v ) ;
            AddEdge( s - 1 , t , v ) , AddEdge( t , s - 1 , - v ) ;
        }
        printf( spfa(  ) ? "true\n" : "false\n" ) ;
    }
    return 0 ;
}

相关文章

  • 1202: [HNOI2005]狡猾的商人(差分约束)

    题目:http://www.lydsy.com/JudgeOnline/problem.php?id=1202 据...

  • 差分约束

    差分约束 什么是差分约束? 差分约束系统(system of difference constraints),是求...

  • 差分约束

    差分约束 (1)求不等式组的可行解 原点需要满足的条件:从原点出发,一定可以走到所有的边。(这一点必须要满足,否则...

  • 《白石子与黑石子》读后感

    《白石子与黑石子》主要讲了一位高利贷债主要让一位商人还债,他十分狡猾,看上了商人的女儿,就让她的女儿来抵债...

  • 商人都是那么狡猾吗?

    文‖珍妮 突然间发现商人好像都会比较奸诈狡猾吧,今天家里面爸妈在买花盆儿,然后就联想起了前段时间买花盆的经历,那时...

  • 算法学习之路|差分约束系统

    摘要:差分约束系统实际上是一种转化,把某些问题转化成最短路问题来进行求解 差分约束系统实际上是一种转化,把某些问题...

  • 无商不艰

    接触商业以来,听到的最多对商人的评价就是“无商不奸”,这是一个对商人满满鄙视的词,就是形容商人的狡猾,善算计或者还...

  • 差分约束,拓扑排序与SCC

    A:区间选点——(差分约束与spfa) 题目: 给定一个数轴上的 n 个区间,要求在数轴上选取最少的点使得第 i ...

  • 合作是成功的最优策略

    商人做生意目的为赚钱,这当然是天经地义的。俗话说,无奸不商,人们对商人的印象经常是奸诈狡猾,唯利是图,甚至有的商人...

  • 钢材加工系列(4)

    D:万汇2个吃完午饭后加工B:马上拆卷B:2.0酸洗宽度1202厚度1.95中间1.94边B:分条下差0.15以内...

网友评论

    本文标题:1202: [HNOI2005]狡猾的商人(差分约束)

    本文链接:https://www.haomeiwen.com/subject/rdglzftx.html