POJ 3159 Candies、
题意:n个小孩,m个比较(给你两个孩子代号a,b.然后c意味着a比b最多只能少c个糖果),问1和n之间差距最大的糖果数量、
思路:这是一个差分约束思路 不懂得:传送门,
转化一下就是一个SPFA求最短路的问题了、
参照了kuangbin大神的模板、
#include<cstring>
#include<cmath>
#include<cstdio>
const int qq=;
const int MAX=0x3f3f3f3f;
int head[qq]; //每个结点的头指针、
bool vis[qq]; //在队列中标记结点是否入队的标记数组、
int Q[qq];
int dis[qq];
int tol;
struct point
{
int v,to;
int next;
}graph[qq<<];
void add(int a,int b,int v)
{
graph[tol].to=b;
graph[tol].v=v;
graph[tol].next=head[a]; //链式前向星
head[a]=tol++;
}
void spfa(int start,int n)
{
int top=;
for(int v=;v<=n;++v){
if(v==start){
Q[top++]=v;
vis[v]=true;
dis[v]=;
}
else{
vis[v]=false;
dis[v]=MAX;
}
}
while(top){ //数组模拟队列
int u=Q[--top];
vis[u]=false;
for(int i=head[u];i!=-;i=graph[i].next){
int v=graph[i].to;
if(dis[v]>dis[u]+graph[i].v){
dis[v]=dis[u]+graph[i].v;
if(!vis[v]){
vis[v]=true;
Q[top++]=v;
}
}
}
}
}
int main()
{
int n,m;
int a,b,c;
while(~scanf("%d%d",&n,&m)){
tol=; //记得初始化、
memset(head,-,sizeof(head));
while(m--){
scanf("%d%d%d",&a,&b,&c); // b-a<=c
// 大-小<=c,有向边(小,大):C
add(a,b,c);
}
spfa(,n);
printf("%d\n",dis[n]);
}
return ;
}
针对为什么要添加一个vis数组谈一下自己的理解把、
SPFA算法+优先队列在处理问题,无论是最短路还是判断是否存在负权回路问题上都是很高效的、
那么vis数组的作用实际上要牵扯到SPFA算法是用的邻接表这种数据结构来进行的、
队列里面存的都是相应的顶点v
哪一些顶点呢、比如你先放一个初始顶点到队列里面去,那么把它弹出来更新当前顶点能到达的所有点已经到达每一个点的最短路径、
在能更新的情况下才会将此顶点放进队列里面去(这就是什么SPFA如此优化的原理),那么相应的每一个顶点在队列里面只要存在一个就行了、
因为只要存在一个的话就会更新它能到达的所有点、如果有多个的话由于此前有一个点已经更新过了、那么此时后面的都是做的无用功、
所以有一个vis数组的话可以降低一些无用功、
- -、表达能力不够理解程度也不够深、
POJ 3159 Candies、的更多相关文章
- POJ 3159 Candies (图论,差分约束系统,最短路)
POJ 3159 Candies (图论,差分约束系统,最短路) Description During the kindergarten days, flymouse was the monitor ...
- poj 3159 Candies (dij + heap)
3159 -- Candies 明明找的是差分约束,然后就找到这题不知道为什么是求1~n的最短路的题了.然后自己无聊写了一个heap,518ms通过. 代码如下: #include <cstdi ...
- POJ 3159 Candies(spfa、差分约束)
Description During the kindergarten days, flymouse was the monitor of his class. Occasionally the he ...
- POJ 3159 Candies(SPFA+栈)差分约束
题目链接:http://poj.org/problem?id=3159 题意:给出m给 x 与y的关系.当中y的糖数不能比x的多c个.即y-x <= c 最后求fly[n]最多能比so[1] ...
- POJ 3159 Candies(差分约束,最短路)
Candies Time Limit: 1500MS Memory Limit: 131072K Total Submissions: 20067 Accepted: 5293 Descrip ...
- POJ 3159 Candies(差分约束)
http://poj.org/problem?id=3159 题意:有向图,第一行n是点数,m是边数,每一行有三个数,前两个是有向边的起点与终点,最后一个是权值,求从1到n的最短路径. 思路:这个题让 ...
- POJ 3159 Candies 解题报告(差分约束 Dijkstra+优先队列 SPFA+栈)
原题地址:http://poj.org/problem?id=3159 题意大概是班长发糖果,班里面有不良风气,A希望B的糖果不比自己多C个.班长要满足小朋友的需求,而且要让自己的糖果比snoopy的 ...
- POJ 3159 Candies(差分约束+spfa+链式前向星)
题目链接:http://poj.org/problem?id=3159 题目大意:给n个人派糖果,给出m组数据,每组数据包含A,B,C三个数,意思是A的糖果数比B少的个数不多于C,即B的糖果数 - A ...
- POJ 3159 Candies 还是差分约束(栈的SPFA)
http://poj.org/problem?id=3159 题目大意: n个小朋友分糖果,你要满足他们的要求(a b x 意思为b不能超过a x个糖果)并且编号1和n的糖果差距要最大. 思路: 嗯, ...
随机推荐
- Java中用JXL导出Excel代码详解
jxl是一个韩国人写的java操作excel的工具, 在开源世界中,有两套比较有影响的API可供使用,一个是POI,一个是jExcelAPI.其中功能相对POI比较弱一点.但jExcelAPI对中文支 ...
- 2019-3-1-WPF-从零开始开发-dotnet-Remoting-程序
title author date CreateTime categories WPF 从零开始开发 dotnet Remoting 程序 lindexi 2019-03-01 09:30:45 +0 ...
- Leetcode59. Spiral Matrix II螺旋矩阵2
给定一个正整数 n,生成一个包含 1 到 n2 所有元素,且元素按顺时针顺序螺旋排列的正方形矩阵. 示例: 输入: 3 输出: [ [ 1, 2, 3 ], [ 8, 9, 4 ], [ 7, 6, ...
- svn基本命令使用
1.svn help:可以通过该命令查看svn的所有操作命令,包括命令的缩写 2.首先需要从svn库中checkout对应的项目: (1)svn项目路径为svn://192.168.1.1/mypro ...
- 【GDOI2017 day2】凡喵识图 二进制切分
题面 100 有一个显然的做法是\(O(n^2)\): 想办法优化这个做法: 我们给一个64位整数,切分成四个16位整数. 那么如果两个64位整数符合汉明距离为3的话,那么两者切分的四个16位整数中: ...
- 关于如何在部署环境修改process.env & 本地测试
前言 最近在搞一些监控的东西, 需要根据不同的环境上报到不同的地址,中间遇到了一些问题,在这里简单总结分享下. 关于process.env 假如你对process.env 相关的概念还不熟悉, 请移步 ...
- 【转】MySQL的btree索引和hash索引的区别
Hash 索引结构的特殊性,其检索效率非常高,索引的检索可以一次定位,不像B-Tree 索引需要从根节点到枝节点,最后才能访问到页节点这样多次的IO访问,所以 Hash 索引的查询效率要远高于 B-T ...
- Redis、MPP、kafka 、MongDB简介
Redis :间值数据库,适合缓存用户Session会话与经常需要查的数据1.Redis集群,为什么在项目中使用集群 1.持久化,持久化是最简单的高可用方法(有时甚至不被归为高可用的手段),主要左右 ...
- MAC+VS Code+C/C++调试配置
目录 VS Code C/C++ 环境配置 添加工作区文件夹 Say Hello world 关于三个配置文件--Debug 原地址 VS Code C/C++ 环境配置 添加工作区文件夹 虽然代码能 ...
- jquery 回车提交事件
$("body").keydown(function(){ if(event.keyCode == "13"){ //13是回车键的位置 } })