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的糖果差距要最大. 思路: 嗯, ...
随机推荐
- 洛谷P1967 [NOIP2013提高组Day1T2]货车运输
P1967 货车运输 题目描述 A 国有 n 座城市,编号从 1 到 n,城市之间有 m 条双向道路.每一条道路对车辆都有重量限制,简称限重.现在有 q 辆货车在运输货物, 司机们想知道每辆车在不超过 ...
- 让Drewtech的J2534 ToolBox 软件支持任何J2534的设备
更改windows注册表中的FunctionLibrary和ConfigApplication,将DLL和exe路径替换原来的,其他不要动. 或者 create second key in regis ...
- 模拟4题解 T3奇袭
T3奇袭 题目描述 由于各种原因,桐人现在被困在Under World(以下简称UW)中,而UW马上 要迎来最终的压力测试——魔界入侵. 唯一一个神一般存在的Administrator被消灭了,靠原本 ...
- ML面试1000题系列(71-80)
本文总结ML面试常见的问题集 转载来源:https://blog.csdn.net/v_july_v/article/details/78121924 71.看你是搞视觉的,熟悉哪些CV框架,顺带聊聊 ...
- spark应用程序引用别的jar包
第一种方式 操作:将第三方jar文件打包到最终形成的spark应用程序jar文件中 应用场景:第三方jar文件比较小,应用的地方比较少 第二种方式 操作:使用spark-submit提交命令的参数: ...
- Spring Boot → 11:项目实战-账单管理系统完整版
Spring Boot → 11:项目实战-账单管理系统完整版
- 【Pyqt5】自定义信号简单原理(易懂版),多窗口交互,传输数据,调用方法
PS:如果你想在2窗口调用1窗口的内部方法,或者在2窗口传递数据给1窗口数据,本片博客可以放心食用 主窗口: class MainWindow(QWidget,Ui_MainFrom): insert ...
- 洛谷 P3950 部落冲突 树链剖分
目录 题面 题目链接 题目描述 输入输出格式 输入格式 输出格式 输入输出样例 输入样例1 输出样例1 输入样例2 输出样例2 输入样例3 输出样例3 说明 思路 AC代码 总结 题面 题目链接 P3 ...
- 多云混合云之多集群统一管理:基于阿里云ACK统一纳管多个不同Kubernetes集群
目前阿里云云原生产品家族已经支持多集群管理功能,允许使用阿里云容器服务Kubernetes(简称ACK)控制台或kubectl命令接入.统一纳管其他公有云.客户IDC自建K8s集群,集中管理部署K8s ...
- JavaScript--返回顶部方法:锚链接、行内式js写法、外链式、内嵌式
返回网页顶部方法 一.锚链接 simpleDemo: <!DOCTYPE html> <html lang="en"> <head> <m ...