poj 3159 Candies
来源:互联网 发布:大数据下的中国 编辑:程序博客网 时间:2024/05/17 08:50
题意:班上有n个同学,现在有一些糖要分给他们,设第i个同学得到的糖为p[i],分糖必须满足条件:第i个同学要求第j个同学的糖不能超过自己k个,即p[j] - p[i] <= k,k >= 0。要求在满足这些条件的情况下,求出p[n] - p[1]的最大值;
最短路问题,就是求有向图最短路,因为假设2比1最多多2个,3比2最多多3个,1比3最多多4个,假如选择1->2->3则3比1最多多5个不符合1比3最多多4个这个条件,因此选择最短路;其实还是请教lsh才明白怎么做用数组建图以及用数组模拟spfa的队列过程;还是太菜- -#
代码:
#include <iostream>#include <stdio.h>#include <string.h>using namespace std;const int maxn=150005;int dis[maxn],vis[maxn],head[maxn];int n,m;struct edgenode{ int to; int w; int next;}edge[maxn];int ip;void add(int u,int v,int w){ edge[ip].to=v,edge[ip].w=w,edge[ip].next=head[u],head[u]=ip++;}void spfa(int s){ int u,t; int q[maxn]; q[t++]=s; dis[s]=0; vis[s]=1; while(t) { u=q[--t]; vis[u]=0; for(int i=head[u];i!=-1;i=edge[i].next) { if(dis[edge[i].to]>(dis[u]+edge[i].w)) { dis[edge[i].to]=(dis[u]+edge[i].w); if(!vis[edge[i].to]) { q[t++]=edge[i].to; vis[edge[i].to]=1; } } } }}int main(){ int a,b,c; while(scanf("%d%d",&n,&m)!=EOF) { memset(vis,0,sizeof(vis)); memset(head,-1,sizeof(head)); ip=1; for(int i=1;i<=m;i++) { scanf("%d%d%d",&a,&b,&c); add(a,b,c); } for(int i=1;i<=n;i++) dis[i]=99999999; spfa(1); printf("%d\n",dis[n]); } return 0;}
0 0
- poj 3159 Candies
- POJ 3159 Candies
- poj 3159 Candies
- POJ 3159 candies总结
- POJ 3159 Candies
- POJ 3159 Candies
- poj 3159-Candies
- POJ-3159-Candies
- POJ 3159 Candies
- POJ 3159 Candies
- poj 3159 Candies
- POJ 3159 Candies
- poj 3159 Candies
- POJ -- 3159 Candies
- poj 3159 Candies
- Candies ( POJ 3159)
- poj 3159 Candies
- POJ 3159 Candies
- 不要以多态的方式处理数组(More Effective-C++_3(基础))
- Opencv TLD VS2012
- Linux网络配置
- 深入浅出 EJB3.1(上)
- 为什么“高大上”的算法工程师变成了数据民工?
- poj 3159 Candies
- 图片编辑器
- Linux文件结构
- PHP模板引擎的原理与实践
- 深入浅出 EJB3.1(下)
- 7 Strace Examples to Debug the Execution of a Program in Linux
- jQuery Ajax 实例
- 机房收费系统之结账
- 【Java】-基础-数据库操作