POJ 3159 - Candies(查分约束)
2015-09-01 10:04
330 查看
题目:
http://poj.org/problem?id=3159
题意:
给n个人派糖果,m组数据,(u,v,w)表示u比v的糖果少的个数不超过w,u-v <=w
最后求出n比1最多 多多少糖果。
思路:
查分约束。
对于(u,v,w)小值向大值建边(u,v).由于要一系列满足不等式,所以应该去(u,v)的最小值,所以转换为求最短路。
spfa算法+栈优化。
AC.
http://poj.org/problem?id=3159
题意:
给n个人派糖果,m组数据,(u,v,w)表示u比v的糖果少的个数不超过w,u-v <=w
最后求出n比1最多 多多少糖果。
思路:
查分约束。
对于(u,v,w)小值向大值建边(u,v).由于要一系列满足不等式,所以应该去(u,v)的最小值,所以转换为求最短路。
spfa算法+栈优化。
AC.
#include <iostream> #include <cstdio> #include <cstring> using namespace std; const int inf = 0x3f3f3f3f; const int maxn = 3e4+5; const int maxm = 15e4+5; int n, m; int tol, head[maxn]; struct Edge{ int to, w, next; }edge[maxm]; void addedge(int u, int v, int w) { edge[tol].to = v; edge[tol].w = w; edge[tol].next = head[u]; head[u] = tol++; } int vis[maxn], dis[maxn]; int Q[maxn]; void spfa(int s) { int top = 0; for(int i = 1; i <= n; ++i) { vis[i] = 0; dis[i] = inf; } vis[s] = 1; dis[s] = 0; Q[top++] = s; while(top != 0) { int u = Q[--top]; vis[u] = 0; for(int i = head[u]; ~i; i = edge[i].next) { int v = edge[i].to, w = edge[i].w; if(dis[v] > dis[u] + w) { dis[v] = dis[u] + w; if(!vis[v]) { vis[v] = 1; Q[top++] = v; } } } } } void init() { tol = 0; for(int i = 1; i <= n; ++i) head[i] = -1; } int main() { //freopen("in", "r", stdin); while(~scanf("%d %d", &n, &m)) { int u, v, w; init(); for(int i = 0; i < m; ++i) { scanf("%d%d%d", &u, &v, &w); addedge(u, v, w); //小->大 } spfa(1); printf("%d\n", dis ); } return 0; }
相关文章推荐
- POJ ACM 1001
- POJ ACM 1002
- POJ 2635 The Embarrassed Cryptographe
- POJ 3292 Semi-prime H-numbers
- POJ 2773 HAPPY 2006
- POJ 3090 Visible Lattice Points
- POJ-2409-Let it Bead&&NYOJ-280-LK的项链
- POJ-1695-Magazine Delivery-dp
- POJ1523 SPF dfs
- POJ-1001 求高精度幂-大数乘法系列
- POJ-1003 Hangover
- POJ-1004 Financial Management
- 用单调栈解决最大连续矩形面积问题
- 2632 Crashing Robots的解决方法
- 1573 Robot Motion (简单题)
- POJ 1200 Crazy Search(简单哈希)
- 【高手回避】poj3268,一道很水的dijkstra算法题
- POJ 1088 滑雪
- poj2387 Til the Cows Come Home—Dijkstra模板
- poj 2485 Highways