POJ 3159(spfa + 数组模拟)
来源:互联网 发布:为什么微信网络不稳定 编辑:程序博客网 时间:2024/06/05 22:50
题意:n个人分糖果,问题是怎么分才能使第一个人和最后一个人相差最多。条件限制是有m个第a不能低于第b人c个。
于是a+c >= b,则可以得到b < a + c.在图中可以认为a->b的权值是c。如果dis[a]+c < dis[b],就松弛。
题中数据过多。则用spfa,并且需要数组模拟queue。
#include<cstdio>#include<iostream>#include<cstring>#define inf 0x3f3f3f3f#define maxn 30005using namespace std;class Node{public: int e,v; int next;}edge[150005];int n,m;int head[maxn];int dis[maxn];int visit[maxn];int Q[maxn];int pos = 0;void spfa(){ pos = 0; memset(dis,inf,sizeof(dis)); memset(visit,0,sizeof(visit)); Q[pos++] = 1; visit[1] = true; dis[1] = 0; while(pos != 0){ int u = Q[--pos]; visit[u] = false; for(int i = head[u];i != -1; i = edge[i].next){ int to = edge[i].e; if(dis[to] < dis[u] + edge[i].v) continue; dis[to] = dis[u] + edge[i].v; if(!visit[to]){ Q[pos++] = to; visit[to] = true; } } }}int main(){// freopen("in.txt","r",stdin); scanf("%d%d",&n,&m); memset(head,-1,sizeof(head)); int a,b,c; for(int i = 1;i <= m; i++){ scanf("%d%d%d",&a,&b,&c); edge[i].e = b; edge[i].v = c; edge[i].next = head[a]; head[a] = i; } spfa(); printf("%d\n",dis[n]); return 0;}
0 0
- POJ 3159(spfa + 数组模拟)
- poj 3013(数组模拟邻接表+spfa)
- poj 3159 Candies 【简单差分约束】 【SPFA + 数组模拟栈】
- POJ-3159-Candies(SPFA+模拟栈)
- POJ 3159Candies 栈模拟SPFA
- poj-3159,SPFA+堆栈
- poj 3159 SPFA+手写栈
- poj 3159 -- Candies ( spfa + 栈 )
- poj 3159 Candies------spfa算法
- POJ 3159 Candies(SPFA+stack)
- poj 3159 Candies (spfa+stack)
- [NOIP 模拟]P老师的旅行 Spfa+树状数组
- POJ 1151(数组化邻接表, 和spfa算法)
- POJ 3159 Candies 差分约束+spfa
- poj 3159 Candies 差分约束 + spfa
- 关于SPFA,记一点小悲催 poj 3159
- POJ 3159 SPFA最短路径
- poj 3159(spfa最短路径)
- 关于CI里面的购物车
- 为什么我从阿里巴巴辞职选择自由职业?
- python中返回函数
- C#导出Excel
- linux虚拟机能ping通windows主机,windows主机ping不通linux虚拟机的解决办法
- POJ 3159(spfa + 数组模拟)
- LeetCode 404. Sum of Left Leaves
- Map快速转换JSon 格式方法和完整的jar
- Js校验表单数据后提交表单的3种方法
- 内存管理算法实现
- cgi实现网页向服务器传送文件
- excel 怎么把转换成整形的ip还原成原来的ip地址
- scrapy自动多网页爬取CrawlSpider类(五)
- 染色问题 (数学)(快速加,快速乘,快速幂)