ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

1042 布局 Layout 最大值差分约束 判断负环

2022-08-24 02:01:24  阅读:212  来源: 互联网

标签:1042 Layout MD int ML 负环 leq dist 奶牛


 链接:https://ac.nowcoder.com/acm/contest/26077/1042
来源:牛客网

题目描述

FJ有N头奶牛(2≤N≤1000)(2 \leq N \leq1000)(2≤N≤1000),编号为1…N1 \ldots N1…N。奶牛们将按照编号顺序排成一列队伍(可能有多头奶牛在同一位置上)。换句话说,假设i号奶牛位于P ⁣  iP_{ \! \;i}Pi​,则P 1≤P 2≤…≤P ⁣  NP_{ \,1} \leq P_{ \,2} \leq \ldots \leq P_{ \! \;N}P1​≤P2​≤…≤PN​。
有些奶牛是好基友,它们希望彼此之间的距离小于等于某个数。有些奶牛是情敌,它们希望彼此之间的距离大于等于某个数。
给出MLM_LML​对好基友的编号,以及它们希望彼此之间的距离小于等于多少;又给出MDM_DMD​对情敌的编号,以及它们希望彼此之间的距离大于等于多少(1≤ML,(1 \leq M_L,(1≤ML​,MD≤104)M_D \leq 10^4)MD​≤104)。
请计算:如果满足上述所有条件,1号奶牛和N号奶牛之间的距离(P ⁣  N−P 1P_{ \! \;N}-P_{ \,1}PN​−P1​)最大为多少。

输入描述:

第一行:三个整数N,ML,MDN,M_L,M_DN,ML​,MD​,用空格分隔。
第2…ML+12 \dots M_L+12…ML​+1行:每行三个整数A,B,D,用空格分隔,表示PA−PB≤DP_A-P_B \leq DPA​−PB​≤D。
第ML+2…ML+MD+1M_L+2 \dots M_L+M_D+1ML​+2…ML​+MD​+1行:每行三个整数A,B,D,用空格分隔,表示PA−PB≥DP_A-P_B \geq DPA​−PB​≥D。
保证1≤A<B≤N,1 \le A<B \le N,1≤A<B≤N,1≤D≤1061 \leq D \leq10^61≤D≤106.

输出描述:

一行,一个整数。如果没有合法方案,输出-1\texttt{-1}-1.如果有合法方案,但1号奶牛可以与N号奶牛相距无穷远,输出-2\texttt{-2}-2.否则,输出1号奶牛与N号奶牛间的最大距离。
示例1

输入

复制
4 2 1
1 3 10
2 4 20
2 3 3

输出

复制
27

说明

这四头牛分别位于0,7,10,27。

备注:

对于全部数据,2≤N≤1000,1≤ML,MD≤104,1≤L,D≤1062 \leq N \leq 1000,1 \leq M_L,M_D \leq 10^4,1 \leq L,D \leq 10^62≤N≤1000,1≤ML​,MD​≤104,1≤L,D≤106。

分析

差分约束的最大值问题

就得想到每个最大值的上界最小。

所以公式就是a <= b + d。add(a,b,d)

 

第一问问能不能实现,就是在判断有没有负环,将所有点放入队列中去判断有没有环就可以了

第二问问是不是无穷远,只用从 1 开始跑 spfa 差分约束就可以了。

第三问同理

//-------------------------代码----------------------------

//#define int ll
const int N = 1e5+10;
int n,ml,md;
V<pii>e[N];
int dist[N],cnt[N];
bool vis[N];


bool spfa(int size) {
    ms(dist,0x3f);
    ms(vis,0);
    
    queue<int> q;
    fo(i,1,size) {
        q.push(i);
        dist[i] = 0;
        vis[i] = 1;
    }
    
    
    while(q.size()) {
        auto tmp = q.front();q.pop();
        vis[tmp] = 0;
        for(auto it:e[tmp]) {
            int j = it.first,w = it.second;
            if(dist[j] > dist[tmp] + w) {
                dist[j] = dist[tmp] + w;
                cnt[j] = cnt[tmp] + 1;
                if(cnt[j] == n) return 1;
                if(!vis[j]) {
                    vis[j] = 1;
                    q.push(j);
                }
                
            }
        }
    }
    return 0;
}

void solve()
{
    cin>>n>>ml>>md;
    fo(i,1,ml) {
        int a,b,c;cin>>a>>b>>c;
        if(a > b) swap(a,b);
        e[a].pb({b,c});
    }
    fo(i,1,md) {
        int a,b,c;cin>>a>>b>>c;
        if(a > b) swap(a,b);
        e[b].pb({a,-c});
    }
    if(spfa(n)) cout<<-1<<endl;
    else {
        spfa(1);
        if(dist[n] == inf) cout<<-2<<endl;
        else cout<<dist[n]<<endl;
    }
}
void main_init() {}
signed main(){
    AC();clapping();TLE;
    cout<<fixed<<setprecision(12);
    main_init();
//  while(cin>>n,n)
//  while(cin>>n>>m,n,m)
//    int t;cin>>t;while(t -- )
    solve();
//    {solve(); }
    return 0;
}

/*样例区


*/

//------------------------------------------------------------

 

标签:1042,Layout,MD,int,ML,负环,leq,dist,奶牛
来源: https://www.cnblogs.com/er007/p/16618415.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有