acwing-1169. 糖果(差分约束)「建议收藏」

acwing-1169. 糖果(差分约束)「建议收藏」幼儿园里有 N 个小朋友,老师现在想要给这些小朋友们分配糖果,要求每个小朋友都要分到糖果。但是小朋友们也有嫉妒心,总是会提出一些要求,比如小明不希望小红分到的糖果比他的多,于是在分配糖果的时候, 老师需要满足小朋友们的 K 个要求。幼儿园的糖果总是有限的,老师想知道他至少需要准备多少个糖果,才能使得每个小朋友都能够分到糖果,并且满足小朋友们所有的要求。输入格式输入的第一行是两个整数 N,K。接下来 K 行,表示分配糖果时需要满足的关系,每行 3 个数字 X,A,B。如果 X=1.表示第 A 个小

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE使用 1年只要46元 售后保障 童叟无欺

幼儿园里有 N 个小朋友,老师现在想要给这些小朋友们分配糖果,要求每个小朋友都要分到糖果。

但是小朋友们也有嫉妒心,总是会提出一些要求,比如小明不希望小红分到的糖果比他的多,于是在分配糖果的时候, 老师需要满足小朋友们的 K 个要求。

幼儿园的糖果总是有限的,老师想知道他至少需要准备多少个糖果,才能使得每个小朋友都能够分到糖果,并且满足小朋友们所有的要求。

输入格式
输入的第一行是两个整数 N,K。

接下来 K 行,表示分配糖果时需要满足的关系,每行 3 个数字 X,A,B。

如果 X=1.表示第 A 个小朋友分到的糖果必须和第 B 个小朋友分到的糖果一样多。
如果 X=2,表示第 A 个小朋友分到的糖果必须少于第 B 个小朋友分到的糖果。
如果 X=3,表示第 A 个小朋友分到的糖果必须不少于第 B 个小朋友分到的糖果。
如果 X=4,表示第 A 个小朋友分到的糖果必须多于第 B 个小朋友分到的糖果。
如果 X=5,表示第 A 个小朋友分到的糖果必须不多于第 B 个小朋友分到的糖果。
小朋友编号从 1 到 N。

输出格式
输出一行,表示老师至少需要准备的糖果数,如果不能满足小朋友们的所有要求,就输出 −1。

数据范围
1≤N<105,
1≤K≤105,
1≤X≤5,
1≤A,B≤N

输入样例:
5 7
1 1 2
2 3 2
4 4 1
3 4 5
5 4 5
2 3 5
4 5 1
输出样例:
11

在这里插入图片描述

#include<bits/stdc++.h>
using namespace std;
const int N = 1e5 + 10;
const int M = 3e5 + 10;
const int INF = 0x3f3f3f3f;
typedef long long ll;
struct Edge{ 
   
    int v,next,w;
}edge[M];
int head[N],cnt;
int s,e;
    int n,m;
int q[N],hh = 0,tt = 0;
int dist[N],c[N];
bool vis[N];
void add(int u,int v,int w){ 
   
    edge[cnt].v = v;
    edge[cnt].w = w;
    edge[cnt].next = head[u];
    head[u] = cnt ++;
}
ll spfa(){ 
     
    memset(dist,-INF,sizeof dist);
    dist[0] = 0,q[tt ++] = 0,vis[0] = true;
    c[0] = 0;
    while(hh < tt){ 
   
        int t = q[-- tt];
        vis[t] = false;
        for(int i = head[t];~i;i =edge[i].next){ 
   
            int v = edge[i].v,w = edge[i].w;    
            if(dist[v] < dist[t] + w){ 
   
                dist[v] = dist[t] + w;
                c[v] = c[t] + 1;
                if(c[v] >= n + 1)return -1;
                if(!vis[v]){ 
   
                    vis[v] = true;
                    q[tt ++] = v;
                }
            }
        }
    }
    ll ans = 0;
    for(int i = 1;i <= n;i ++)ans += dist[i];
    return ans;
}
int main(){ 
   
    scanf("%d %d",&n,&m);
    int x,y;
    int c;
    memset(head,-1,sizeof head);
    for(int i = 0;i < m;i ++){ 
   
        scanf("%d %d %d",&c,&x,&y);
        if(c == 1)add(x,y,0),add(y,x,0);
        if(c == 2)add(x,y,1);
        if(c == 3)add(y,x,0);
        if(c == 4)add(y,x,1);
        if(c == 5)add(x,y,0);
    }
    for(int i = 1;i <= n;i ++){ 
   
        add(0,i,1);
    }
    ll ans = spfa();
    printf("%lld",ans);
    return 0;
}
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/169082.html原文链接:https://javaforall.net

(0)
上一篇 2022年8月11日 下午6:16
下一篇 2022年8月11日 下午6:36


相关推荐

  • 三点估算法

    三点估算法施工时间划分为乐观时间 最可能时间 悲观时间乐观时间 也就是工作顺利情况下的时间为 a 最可能时间 最可能时间 就是完成某道工序的最可能完成时间 m 悲观时间 最悲观的时间就是工作进行不利所用时间 b 活动历时均值 或估计值 乐观估计 4 最可能估计 悲观估计 6 活动历时方差 悲观估计值 乐观估计值 6 用 PERT 公式计算出来的是完成某活动的平均工期 即

    2026年3月26日
    1
  • 欧拉筛法(线性筛)的学习理解

    前言在刚接触编程语言时,对于寻找素数,第一时间想到的便是二重循环暴力查找,其复杂度O(n),通过循环中只判断到根号n可以优化一些,不过复杂度也达不到预期。在数论的学习中,我学到了埃氏筛法,O(nloglogn)的算法,而在一些数据范围达到1e7这样的题目中,也很难让人满意,于是我便学习了欧拉筛法,也即O(n)的线性筛法。埃氏筛法埃氏筛法的基本思想:从2开始,将每个质数的倍数都…

    2022年4月5日
    76
  • 御用导航提示提醒_AR实景导航,让你安全驾驶,不再“绕弯”

    御用导航提示提醒_AR实景导航,让你安全驾驶,不再“绕弯”虽然现在手机、车机的导航能力越来越强,但是当我们遇到不熟悉的路况,特别是在立交桥和高速匝道口时还是会出拐错弯或错过路口的情况,而往往错过了一个出口,就意味着你要多跑几公里甚至更远!!基于当前复杂的行车环境,EASYOWN联合高德地图,推出了AR系列行车记录仪,在应对相关行车痛点问题上拥有完美的解决方案。EASYOWN-E3AR行车记录仪通过连接高德地图,在真实的路况信息中,加入3D…

    2022年5月7日
    1.4K
  • mysql修改字段的名称类型_MySQL修改字段名和字段数据类型

    mysql修改字段的名称类型_MySQL修改字段名和字段数据类型使用 ALTERTABLE 语句可以直接修改字段名和该字段的数据类型 实例 将 itbiancheng 表中的 sex 字段改名为 stu sex 并且数据类型修改为 INT 2 操作步骤如下 1 使用 DESC 语句查看 itbiancheng 表的结构 从查询结果可以看出 itbiancheng 表中存在 sex 字段 并且数据类型为 TINYINT 1 2 执行 ALTERTABLE 语句修改 sex 字段名和数据类型

    2026年3月17日
    2
  • 计算机网络基础知识试题及答案,计算机网络基础知识试卷及答案

    计算机网络基础知识试题及答案,计算机网络基础知识试卷及答案计算机网络基础知识试卷及答案一 填空题 每空 1 分 1 计算机网络的要素 至少两台计算机 有线 或 无线 通信介质 2 计算机网络体系结构的应用层是 网络系统 和 人 的接口 其任务是向用户提供各种直接的服务 3 TCP IP 协议是 传输控制协议 网际协议 协议 它规定了互联网上计算机之间互相通信的方法 4 电子邮件地址 liliyang http doc docsou com 中的 liliy

    2026年3月19日
    2
  • 古琴【A5】良宵引-不好听

    古琴【A5】良宵引-不好听所谓 引 是一种文体名 大略如序而稍为短简 在音乐中 它是乐曲体裁之一 同时也代表了一种曲风 有序奏之意 从题意看 这是一首描写月夜轻风 良宵雅兴的琴曲 乐曲结构精致 旋律婉转 曲风恬静 引人入胜 是小曲之中的精品 此曲最早见於明朝严澂编写的 松弦馆琴谱 其在 松弦馆琴谱 原琴谱无解题

    2026年1月19日
    3

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号