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的糖果差距要最大. 思路: 嗯, ...
随机推荐
- 利用Git搭建自动部署的Laravel环境 - 钟晨宇的博客 - CSDN博客
目标:服务器上搭建Laravel环境,本地使用IDE进行开发,使用Homestead做本地调试环境,代码提交后自动部署到服务器Root目录下. 下面是整个流程的示意图: 1. 准备工作,搭建LNMP ...
- python中星号
第一种情况:用在两表达式的中间,*表示乘法,**表示取幂,如: 1 2 3 4 >>> 2*5 10 >>> 2**7 128 第二种情况:用在变量的前面. 1,向 ...
- 直白介绍卷积神经网络(CNN)【转】
英文地址:https://ujjwalkarn.me/2016/08/11/intuitive-explanation-convnets/ 中文译文:http://mp.weixin.qq.com/s ...
- jmeter 之 https 请求
本文为自己学习总结,转载需说明出处. jmeter发送https请求需要在巨jmeter中导入被测试网站的安全证书. 一.通过浏览器登录对应的网站导出安全证书.下面操作以360浏览器为例: 二.把导出 ...
- android中的http框架,使其更加简单易用
Afinal 是一个android的sqlite orm 和 ioc 框架. Afinal 是一个android的sqlite orm 和 ioc 框架.同时封装了android中的http框架,使其 ...
- 基于遗传算法(Genetic Algorithm)的TSP问题求解(C)
基于遗传算法的TSP问题求解(C) TSP问题: TSP(Travelling salesman problem): 译作“旅行商问题”, 一个商人由于业务的需要,要到n个城市,每个城市之间都有一条路 ...
- LintCode刷题笔记-- Edit distance
标签:动态规划 描述: Given two words word1 and word2, find the minimum number of steps required to convert wo ...
- CentOS8/RHEL8--恢复root用户密码及简易加固GRUB
CentOS8/RHEL8--简易加固GRUB 今天突然想到放在数据中心的虚拟化平台下的Linux服务器,都是采用默认方式安装的,没有设置太多的安全选项,如果有恶意用户重启服务器后,通过GRUB调整启 ...
- 解决CSDN博客插入代码出现的问题
我在写CSDN博客的时候有时候会在插入代码之后继续编辑,然后保存之后经常会出现一些多余的符号<p 例如<pre></pre>,这样的标记,其实这是html的一个元素,pr ...
- freemarker 取值(插值)(转)
Java数据模型 1)基本数据类型取值 八种基本的java类型:byte.short.int.long:float,double:char:boolean 对应的封装类型:Byte.Short.Int ...