ac测评题库_acwing算法基础

ac测评题库_acwing算法基础幼儿园里有 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;
}
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/168579.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • QT QMap 使用方法实例

    QT QMap 使用方法实例QTQMap使用方法,直接上例子,请仔细体会。

  • 大数据实时项目(采集部分)[通俗易懂]

    大数据实时项目(采集部分)[通俗易懂]第一章 实时需求概览1实时需求与离线需求的比较离线需求,一般是根据前一日的数据生成报表,虽然统计指标、报表繁多,但是对时效性不敏感。实时需求,主要侧重于对当日数据的实时监控,通常业务

  • matlab是fmincon,matlab中fmincon

    matlab是fmincon,matlab中fmincon标签:fmincon|MATLAB非线性优化fmincon_数学_自然科学_专业资料。MATLAB非线性优化函数fmincon的详细整理active-setandsqpalgorithms不接受用户提供的海塞矩阵……精品Matlab优化函数fmincon1.fmincon是一种局部优化…很多人只知道用matlab中的fmincon函数,却不清楚它的真正意思,…

  • QueryInterface详解 COM

    QueryInterface详解 COMQueryInterface接口查询IUnknown:      所有的COM接口均需要继承IUnknown接口。因此,若某个用户拥有一个IUnknown接口指针,它并不需要知道它所拥有的接口指针到底是什么类型的,而只需要通过此接口就可以用来查询其他接口就行了。      由于所有的COM接口都继承了IUnknown,每个接口的vbtl的前三项都是QueryInterface,A

  • RTCP「建议收藏」

    RTCP「建议收藏」RTCPRTCP协议将控制包周期发送给所有连接者,应用与数据包相同的分发机制。低层协议提供数据与控制包的复用,如使用单独的UDP端口号。RTCP执行下列四大功能:(1)主要是提供数据发布的质量反馈。R

  • Quartus II 使用详解

    Quartus II 使用详解今天早上做了《计算机组成原理》课的第一次实验。在这介绍一下QuartusⅡ如何使用,希望能帮到有需要的人。1、新建工程项目。2、填写项目存储路径和工程名,不要出现中文路径。3、添加已存在文件(可选),在【Filename】下选择已经存在的工程项目,利用【Add】或【Addall】命令添加文件到新工程,点击【Next】4、选择设备系列,并在【de…

    2022年10月16日

发表回复

您的电子邮箱地址不会被公开。

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