题目连接

https://www.acwing.com/problem/content/4250/

http://poj.org/problem?id=3159

思路

假设第i个同学得到的糖果数量为a[i]a[i]a[i],然后第j个同学得到的糖果数位a[j]a[j]a[j]现在要求第j个同学的糖果数不超过a[i]+ka[i] + ka[i]+k个,也就是a[j]−a[i]<=ka[j] - a[i] <= ka[j]−a[i]<=k,那么我们要求的就是a[n]−a[1]a[n]-a[1]a[n]−a[1]的最大值

我们将上述不等式变形:a[j]<=a[i]+ka[j] <= a[i] + ka[j]<=a[i]+k,我们发现这个等式不就是最短路的松弛条件吗,所以我们直接将aaa、bbb连成一条有向边,边权为ccc,然后跑一个起点为1的最短路即可,最后输出dis[n]dis[n]dis[n]的值,这个题也是一个经典的差分约束题目,关于差分约束简单提一下,感兴趣可以去百度一下,差分约束就是给出一些形如x-y<=b不等式的约束,问你是否满足有解的问题

代码

链式前向星优化

#include<iostream>
#include<cstring>
#include<algorithm>
#include<cstdio>
#include<queue>
using namespace std;
#define PII pair<int,int>
#define INF 0x3f3f3f3f
const int N = 150000 + 10;struct Node{int v,w,next;
}E[N];
int head[N],dis[N],cnt,n,m,vis[N];void add(int u,int v,int w){E[cnt].v = v;E[cnt].w = w;E[cnt].next = head[u];head[u] = cnt++;
}void DJ(int s){priority_queue<PII,vector<PII>,greater<PII> > que;que.push({0,s});dis[s] = 0;while(!que.empty()){int t = que.top().second;int w = que.top().first;que.pop();if(dis[t] < w) continue;for(int i = head[t];~i;i=E[i].next){int j = E[i].v;if(dis[j] > dis[t] + E[i].w){dis[j] = dis[t] + E[i].w;que.push({dis[j],j});}}}
}int main()
{scanf("%d%d",&n,&m);memset(dis,0x3f,sizeof dis);memset(head,-1,sizeof head);int u,v,w;for(int i = 1;i <= m; ++i) {scanf("%d%d%d",&u,&v,&w);add(u,v,w);}DJ(1);printf("%d\n",dis[n]);return 0;
}

vector容器存储

#include<bits/stdc++.h>
using namespace std;
//----------------自定义部分----------------
#define ll long long
#define mod 1000000007
#define endl "\n"
#define PII pair<int,int>
#define INF 0x3f3f3f3fint dx[4]={0,-1,0,1},dy[4]={-1,0,1,0};ll ksm(ll a,ll b) {ll ans = 1;for(;b;b>>=1LL) {if(b & 1) ans = ans * a % mod;a = a * a % mod;}return ans;
}ll lowbit(ll x){return -x & x;}const int N = 2e6+10;
//----------------自定义部分----------------
int n,m,q;vector<PII> E[N];
int dis[N];
bool vis[N];void slove(){memset(dis,INF,sizeof dis);dis[1] = 0;priority_queue<PII,vector<PII>,greater<PII> >que;que.push({0,1});while(!que.empty()){PII t = que.top();que.pop();int p = t.second;if(vis[p]) continue;vis[p] = true;for(int i = 0,l = E[p].size(); i < l; ++i){int j = E[p][i].first,k = E[p][i].second;if(dis[j] > dis[p] + k){dis[j] = dis[p] + k;que.push({dis[j],j});}} }if(dis[n] == INF)cout<<-1<<endl;else cout<<dis[n]<<endl;
}int main()
{std::ios::sync_with_stdio(false);std::cin.tie(nullptr);std::cout.tie(nullptr);cin>>n>>m;int u,v,w;for(int i = 0;i < m; ++i) {cin>>u>>v>>w;E[u].push_back({v,w});}slove();return 0;
}

AcWing 4247. 糖果(差分约束最短路)相关推荐

  1. HDU1811 Rank of Tetris 拓扑排序+并查集 OR 差分约束最短路+并查集

    题目链接 题意:就是给你一堆关系,看能不能排出个确定的顺序 做法: 1. 拓扑排序+并查集 应该很容易想到的一种思路,大于小于建立单向边.对于相等的呢,就把他们缩成一个点.就用并查集缩成一个点就行了 ...

  2. [CCO 2019] Sirtet(差分约束+最短路)

    [CCO 2019] Sirtet description solution code description 题目链接 solution 很巧妙地将差分约束隐藏起来 问题的关键在于求出每一个sand ...

  3. I - 动物狂想曲 (HDU-6252)(差分约束-最短路模型+判负环)

    雷格西桑和路易桑是好朋友,在同一家公司工作.他们总是一起乘地铁去上班.他们的路线上有N个地铁站,编号从1到N.1站是他们的家,N站是公司. 有一天,雷格西桑起床晚了.当他来到车站时,路易桑已经离开X分 ...

  4. POJ - 1201 Intervals(差分约束+最短路)

    题目链接:点击查看 题目大意:给定n个闭区间[ai,bi]和n个整数ci,你需要构造一个整数集合Z,使得Z中满足所有的ai<=x<=bi的整数不少于ci个,求出这样的整数集合Z最少包含多少 ...

  5. 算法提高课-图论-差分约束- AcWing 1169. 糖果:spfa求单源最短路、差分约束

    文章目录 题目分析 题目链接 题目分析 来源:acwing 分析: 差分约束系统 差分约束系统是一种特殊的N元一次不等式组.它包含N个变量X1,...,XnX_1,...,X_nX1​,...,Xn​ ...

  6. 1169 糖果(差分约束)

    1. 问题描述: 幼儿园里有 N 个小朋友,老师现在想要给这些小朋友们分配糖果,要求每个小朋友都要分到糖果.但是小朋友们也有嫉妒心,总是会提出一些要求,比如小明不希望小红分到的糖果比他的多,于是在分配 ...

  7. 差分约束 【bzoj2330】[SCOI2011]糖果

    /*[bzoj2330][SCOI2011]糖果 2014年3月5日1,2761 Description 幼儿园里有N个小朋友,lxhgww老师现在想要给这些小朋友们分配糖果,要求每个小朋友都要分到糖 ...

  8. POJ3169 Layout , 最短路算法解差分约束问题

    POJ3169 Layout 题意: n头牛编号为1到n,按照编号的顺序排成一列,每两头牛的之间的距离 >= 0.这些牛的距离存在着一些约束关系:1.有ml组(u, v, w)的约束关系,表示牛 ...

  9. QBXT 2018春季DP图论班 2018.4.29 --- 最短路差分约束

    *钟皓曦老师授课* 常见最短路算法: Floyd → O(n^3) //floydint dist[maxn][maxn];memset(dist,0x3f,sizeof(dist)); for (i ...

最新文章

  1. 高岭土吸附阳离子_工业中高岭土、高岭石中的应用特点!
  2. 字符流复制Java文件
  3. python坐标怎么打_python导入坐标点的操作方法
  4. js引擎执行代码的基本流程
  5. 怎么用计算机算账单,电脑如何快速调出计算器
  6. 文本输入框input将输入转换为统一大小写
  7. linux下ftp二进制传输,FTP的两种传输模式:BINARY和ASCII
  8. ext3与ext4主要区别
  9. MATLAB-数组的使用
  10. Spring之Bean后处理器——BeanPostProcessor的使用与源码解析
  11. Word:快速插入水平分隔线(转)
  12. Tableau自定义调色板
  13. 进销存系统的成本核算方法一览
  14. 上海华谊(集团)公司-统一业务协同平台
  15. 基于HAL库的stm32F7串口通信
  16. ORAN接收窗监测和UL U平面发送窗
  17. Access的DateAdd 函数
  18. Slumdog Millionaire--《贫民窟的百万富翁》
  19. 12306五大焦点看高性能高并发系统
  20. HyperDock优化Mac的Dock栏

热门文章

  1. CenterLoss
  2. 4.Java JSON使用
  3. android 系统dialog的应用
  4. 第二十二篇 jQuery 学习4 内容和属性
  5. golang fatal error: all goroutines are asleep - deadlock!
  6. ubuntu终端快速启动应用程序
  7. 【剑指offer】面试题五:从尾到头打印链表
  8. Linux 获取网关地址
  9. PHP字符串替换函数strtr()的功能实现讲解
  10. Eclipse添加JBOSS支持