博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
POJ 3159 Candies(差分约束+最短路)题解
阅读量:5901 次
发布时间:2019-06-19

本文共 1620 字,大约阅读时间需要 5 分钟。

题意:给a b c要求,b拿的比a拿的多但是不超过c,问你所有人最多差多少

思路:在最短路专题应该能看出来是差分约束,条件是b - a <= c,也就是满足b <= a + c,和spfa的松弛条件相对应,所以我们建一条a到b的边,权值c,然后跑最短路,求出所有差值最大的那个即为答案。应该算是基础的线性差分约束题。

ps:队列超时,这里用栈。

关于差分约束

#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#define ll long longusing namespace std;const int maxn = 30000+10;const int INF = 0x3f3f3f3f;struct Edge{ int v,cost,next;}edge[1500000];int head[maxn],tot;void init(){ tot = 0; memset(head,-1,sizeof(head));}void addEdge(int u,int v,int cost){ edge[tot].v = v; edge[tot].cost = cost; edge[tot].next = head[u]; head[u] = tot++;}bool vis[maxn];int cnt[maxn];int dist[maxn];bool spfa(int start,int n){ memset(vis,false,sizeof(vis)); for(int i = 1;i <= n;i++) dist[i] = INF; vis[start] = true; dist[start] = 0; stack
q; while(!q.empty()) q.pop(); q.push(start); memset(cnt,0,sizeof(cnt)); cnt[start] = 1; while(!q.empty()){ int u = q.top(); q.pop(); vis[u] = false; for(int i = head[u];i != -1;i = edge[i].next){ int v = edge[i].v; if(dist[v] > dist[u] + edge[i].cost){ dist[v] = dist[u] + edge[i].cost; if(!vis[v]){ vis[v] = true; q.push(v); if(++cnt[v] > n) return false; } } } } return true;}int main(){ int n,m; init(); int a,b,c; // b - a <= c : when b > a + c then change scanf("%d%d",&n,&m); while(m--){ scanf("%d%d%d",&a,&b,&c); addEdge(a,b,c); } spfa(1,n); int Max = 0; for(int i = 2;i <= n;i++){ if(dist[i] < INF) Max = max(Max,dist[i]); } printf("%d\n",Max); return 0;}

 

转载于:https://www.cnblogs.com/KirinSB/p/9485719.html

你可能感兴趣的文章
Can&#39;t get Kerberos realm
查看>>
正则表达式 学习笔记1.1
查看>>
通过案例学调优之--AWR BaseLine管理
查看>>
如何使用MySQL提升权限
查看>>
keepalived 原理,安装,配置
查看>>
乐在其中设计模式(C#) - 单例模式(Singleton Pattern)
查看>>
AssetBundle进阶内存优化(Unity 4.x)
查看>>
Windows Home Server 简体中文版安装和配置体验 - 海量图鉴
查看>>
Silverlight & Blend动画设计系列五:故事板(StoryBoards)和动画(Animations)
查看>>
Windows 8部署系列PART3:配置WDS服务器环境
查看>>
Ruby中写一个判断成绩分类的脚本
查看>>
《从零开始学Swift》学习笔记(Day 40)——析构函数
查看>>
Exchange2003-2010迁移系列之十,Exchange证书攻略
查看>>
infortrend ESDS RAID6故障后的数据恢复方案
查看>>
extmail集群的邮件负载均衡方案 [lvs dns postfix]
查看>>
SCCM2012SP1---资产管理和远程管理
查看>>
org.springframework.util 类 Assert的使用
查看>>
java提供类与cglib包实现动态代理
查看>>
flask上传多个文件,获取input中的数组
查看>>
更改UIView的背景
查看>>