[模板_差分约束]AcWing 1169. 糖果

2023-10-29 08:18

本文主要是介绍[模板_差分约束]AcWing 1169. 糖果,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

AcWing 1169. 糖果

  • 问题描述
  • 具体分析
  • 具体代码
  • 总结

问题描述

  1. acwing.
  2. LUOGU.

具体分析

个人理解:
1.差分约束问题就是一种把这类问题抽象出图,然后利用最短路算法去求解。是最短路的一个经典应用。
2.但是在具体的代码实现中,会遇到许多问题。例如:一般spfa求负环会TLE;虚拟源点(超级远点)的建立……
3.具体实现思想:利用最短路问题中的不等性质,将问题中的不等关系转化成图中的带权边,再根据——“求最小值跑最长路,求最大值跑最短路”的结论,用spfa求解dist数组。

具体代码

#include <bits/stdc++.h>using namespace std;
const int N = 1e5 + 10,M = 3 * N;//因为有超级源点,所以要开三倍的边typedef long long LL;//会爆intint h[N],e[M],ne[M],w[M],idx;
int n,k;
bool st[N];//spfa必备
LL dist[N];
int cnt[N];//求负环必备
void add(int a,int b,int c)
{e[idx]=b,w[idx]=c,ne[idx]=h[a],h[a]=idx++;
}bool spfa()
{memset(dist,-0x3f,sizeof dist);//因为是求最长路,所以初始化成负的dist[0]=0;stack<int> q;q.push(0);st[0]=true;while(q.size()){auto t = q.top();q.pop();st[t]=false;for(int i=h[t];~i;i=ne[i]){int j=e[i];if(dist[j]<dist[t]+w[i]){dist[j]=dist[t]+w[i];cnt[j] = cnt[t] + 1;if(cnt[j]>n)    return false;//存在负环if(!st[j])  {q.push(j);st[j]=true;}}}}return true;
}int main()
{scanf("%d%d",&n,&k);memset(h,-1,sizeof h);for(int i=0;i<k;i++){int x,a,b;scanf("%d%d%d",&x,&a,&b);if(x==1)//重点!!建边时一定要在纸上写清楚如何将不等式转换成边add(a,b,0),add(b,a,0);else if(x==2)   add(a,b,1);else if(x==3)   add(b,a,0);else if(x==4)   add(b,a,1);else add(a,b,0);}for(int i=1;i<=n;i++)//建立超级源点{add(0,i,1);}if(!spfa()) puts("-1");else{LL ans = 0;for(int i=1;i<=n;i++)ans+=dist[i];printf("%lld",ans);}return 0;
}

总结

坑还是挺多的:
1.spfa中如果用queue,有负环的话会超时,这里要用stack玄学优化。
2.M要开3倍N,不然就会TLE。
3.会爆int。

这篇关于[模板_差分约束]AcWing 1169. 糖果的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/299407

相关文章

Python中Flask模板的使用与高级技巧详解

《Python中Flask模板的使用与高级技巧详解》在Web开发中,直接将HTML代码写在Python文件中会导致诸多问题,Flask内置了Jinja2模板引擎,完美解决了这些问题,下面我们就来看看F... 目录一、模板渲染基础1.1 为什么需要模板引擎1.2 第一个模板渲染示例1.3 模板渲染原理二、模板

MySQL数据库约束深入详解

《MySQL数据库约束深入详解》:本文主要介绍MySQL数据库约束,在MySQL数据库中,约束是用来限制进入表中的数据类型的一种技术,通过使用约束,可以确保数据的准确性、完整性和可靠性,需要的朋友... 目录一、数据库约束的概念二、约束类型三、NOT NULL 非空约束四、DEFAULT 默认值约束五、UN

利用Python打造一个Excel记账模板

《利用Python打造一个Excel记账模板》这篇文章主要为大家详细介绍了如何使用Python打造一个超实用的Excel记账模板,可以帮助大家高效管理财务,迈向财富自由之路,感兴趣的小伙伴快跟随小编一... 目录设置预算百分比超支标红预警记账模板功能介绍基础记账预算管理可视化分析摸鱼时间理财法碎片时间利用财

如何在 Spring Boot 中实现 FreeMarker 模板

《如何在SpringBoot中实现FreeMarker模板》FreeMarker是一种功能强大、轻量级的模板引擎,用于在Java应用中生成动态文本输出(如HTML、XML、邮件内容等),本文... 目录什么是 FreeMarker 模板?在 Spring Boot 中实现 FreeMarker 模板1. 环

C# Where 泛型约束的实现

《C#Where泛型约束的实现》本文主要介绍了C#Where泛型约束的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧... 目录使用的对象约束分类where T : structwhere T : classwhere T : ne

IDEA自动生成注释模板的配置教程

《IDEA自动生成注释模板的配置教程》本文介绍了如何在IntelliJIDEA中配置类和方法的注释模板,包括自动生成项目名称、包名、日期和时间等内容,以及如何定制参数和返回值的注释格式,需要的朋友可以... 目录项目场景配置方法类注释模板定义类开头的注释步骤类注释效果方法注释模板定义方法开头的注释步骤方法注

SpringValidation数据校验之约束注解与分组校验方式

《SpringValidation数据校验之约束注解与分组校验方式》本文将深入探讨SpringValidation的核心功能,帮助开发者掌握约束注解的使用技巧和分组校验的高级应用,从而构建更加健壮和可... 目录引言一、Spring Validation基础架构1.1 jsR-380标准与Spring整合1

C++中函数模板与类模板的简单使用及区别介绍

《C++中函数模板与类模板的简单使用及区别介绍》这篇文章介绍了C++中的模板机制,包括函数模板和类模板的概念、语法和实际应用,函数模板通过类型参数实现泛型操作,而类模板允许创建可处理多种数据类型的类,... 目录一、函数模板定义语法真实示例二、类模板三、关键区别四、注意事项 ‌在C++中,模板是实现泛型编程

基于Java实现模板填充Word

《基于Java实现模板填充Word》这篇文章主要为大家详细介绍了如何用Java实现按产品经理提供的Word模板填充数据,并以word或pdf形式导出,有需要的小伙伴可以参考一下... Java实现按模板填充wor编程d本文讲解的需求是:我们需要把数据库中的某些数据按照 产品经理提供的 word模板,把数据

SQL中的外键约束

外键约束用于表示两张表中的指标连接关系。外键约束的作用主要有以下三点: 1.确保子表中的某个字段(外键)只能引用父表中的有效记录2.主表中的列被删除时,子表中的关联列也会被删除3.主表中的列更新时,子表中的关联元素也会被更新 子表中的元素指向主表 以下是一个外键约束的实例展示