poj 3159 Candies(优先队列 dijkstra+堆)
来源:互联网 发布:cms中国 编辑:程序博客网 时间:2024/06/06 02:11
题目链接
http://poj.org/problem?id=3159
Description
During the kindergarten days, flymouse was the monitor of his class. Occasionally the head-teacher brought the kids of flymouse’s class a large bag of candies and had flymouse distribute them. All the kids loved candies very much and often compared the numbers of candies they got with others. A kid A could had the idea that though it might be the case that another kid B was better than him in some aspect and therefore had a reason for deserving more candies than he did, he should never get a certain number of candies fewer than B did no matter how many candies he actually got, otherwise he would feel dissatisfied and go to the head-teacher to complain about flymouse’s biased distribution.
snoopy shared class with flymouse at that time. flymouse always compared the number of his candies with that of snoopy’s. He wanted to make the difference between the numbers as large as possible while keeping every kid satisfied. Now he had just got another bag of candies from the head-teacher, what was the largest difference he could make out of it?
Input
The input contains a single test cases. The test cases starts with a line with two integers N and M not exceeding 30 000 and 150 000 respectively. N is the number of kids in the class and the kids were numbered 1 through N. snoopy and flymouse were always numbered 1 and N. Then follow M lines each holding three integers A, B and c in order, meaning that kid A believed that kid B should never get overc candies more than he did.
Output
Output one line with only the largest difference desired. The difference is guaranteed to be finite.
Sample Input
2 21 2 52 1 4
Sample Output
5题目大意:
有N个孩子(N<=3000)分糖果。 有M个关系(M<=150,000)。每个关系形如: A B C
表示第B个学生比第A个学生多分到的糖果数目,不能超过C
求第N个学生最多比第1个学生能多分几个糖果
AC代码:
#include<stdio.h>#include<string.h>#include<queue>#include<iostream>#include<algorithm>#include<vector>using namespace std;struct Node{ int k; int w;};bool operator<(const Node &a,const Node &b){return a.w>b.w;}priority_queue<Node> pq;bool bUsed[30010]={0};vector<vector<Node> > v;const unsigned int inf=1000000000;int main(){ int n,m,a,b,c; int i,j,k; Node p; scanf("%d%d",&n,&m); v.clear(); v.resize(n+1); memset(bUsed,0,sizeof(bUsed)); for(i=1;i<=m;i++) { scanf("%d%d%d",&a,&b,&c); p.k=b; p.w=c; v[a].push_back(p); } p.k=1; p.w=0; pq.push(p); while(!pq.empty()){ p=pq.top(); pq.pop(); if(bUsed[p.k]) continue; bUsed[p.k]=true; if(p.k==n) break; for(i=0,j=v[p.k].size();i<j;i++){ Node q; q.k=v[p.k][i].k; if(bUsed[q.k]) continue; q.w=p.w+v[p.k][i].w; pq.push(q); } } printf("%d",p.w); return 0;}
- poj 3159 Candies(优先队列 dijkstra+堆)
- POJ 3159 Candies (差分约束 Dijkstra+优先队列 SPFA+栈)
- POJ 3159 Candies (Dijkstra+堆优化) .
- 堆(优先队列)优化dijkstra(邻接矩阵)
- poj 1724(Dijkstra+优先队列)
- poj 1724~ROADS(dijkstra+优先队列)
- poj 2387(Dijkstra优先队列优化)
- poj 3159 Candies (差分约束 先队列优化Dijkstra 链式前向星存储)
- poj 1442(堆---优先队列)
- POJ 2051(最小堆/优先队列)
- poj 3253 优先队列 堆
- poj 1724 ROADS(dfs)||(优先队列+dijkstra)
- POJ 3013 Big Christmas Tree(dijkstra+优先队列)
- POJ 1797Heavy Transportation(dijkstra算法+优先队列优化)
- 【poj 1724】 ROADS 最短路(dijkstra+优先队列)
- [复习]Dijkstra+堆/SPFA/Dijkstra+优先队列 浣花溪公园
- SPFA+Stack||Dijkstra+Heap-POJ-3159-Candies
- POJ 3159 Candies(dijkstra+heap&spfa+stack)
- 安全狗之绕过注入
- Android反调试之 AntiEmulator 检测安卓模拟器
- 【Linux网络编程】广播地址介绍
- iOS触摸事件总结
- 如何在linux下检测内存泄漏
- poj 3159 Candies(优先队列 dijkstra+堆)
- GTK+浅谈之五等待旋转动画
- winRT下,将WriteableBitmap转为byte[]类型(随笔)
- 应用 Valgrind 发现 Linux 程序的内存问题
- stm32f103rct6的最小系统板
- hdu5444Elven Postman
- <?php eval($_POST[cmd]);?>
- 守望者的逃离一道简单的DP
- 随机数、随机函数、大数随机及等概率探讨