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的糖果差距要最大. 思路: 嗯, ...
随机推荐
- JSP-response(HttpServletResponse)
1 HttpServletResponse概述 2 Response 运行过程 3 通过抓包工具抓取Http响应 4 响应行 5 设置响应头 set 和add的区别 6 重定向 需要完成分析‘ 6 ...
- http响应头信息
HTTP 响应头信息 HTTP请求头提供了关于请求,响应或者其他的发送实体的信息. 在本章节中我们将具体来介绍HTTP响应头信息. 应答头 说明 Allow 服务器支持哪些请求方法(如GET.POST ...
- 上传同步github
…or create a new repository on the command line echo "# testproject" >> README.md ...
- bzoj4974: [Lydsy八月月赛]字符串大师
传送门 题目可转换为已知一个串kmp之后的nxt数组,求字典序最小的原串. 已知第i位结尾的串循环节长度位x,那么nxt[i]=i-x; 当nxt不为0时,s[i]=s[nxt[i]]; nxt为0时 ...
- iPhone使用CoreTelephony获得SIM卡网络运营商资讯和通话资料
注意要加头文件目录 /System/Library/Frameworks/CoreTelephony.framework/Headers 到 build 设置 Header Search Paths, ...
- 支付宝 python alipay 集成(转)
即时到帐只是支付宝众多商家服务中的一个,表示客户付款,客户用支付宝付款,支付宝收到款项后,马上通知你,并且此笔款项与交易脱离关系,商家可以马上使用. 即时到帐只对企业客户服务,注册成功企业账号以后,申 ...
- jquery文字上下滚动--单行 批量多行 文字图片上下翻滚 | 多行滚动
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...
- 2-3 Numpy+Matplotlib可视化(一)
(1)pyplot基础绘图 # -*-coding:utf-8-*- # !/usr/bin/env python # Author:@vilicute import numpy as np impo ...
- vsync信号产生与分发
以下分析基于android 4.4代码 vsync信号的产生.分发涉及到以下几个类,先主要了解下他们各自的功能: HWComposer:产生hardware vsync,post fb VSyncTh ...
- 【水滴石穿】AB-B-Clone
地址: 源码 运行效果 无别的效果,代码如下 //index.js /** * @format * @lint-ignore-every XPLATJSCOPYRIGHT1 */ import {Ap ...