pku 1275 Cashier Employment 差分约束
2012-06-24 16:36
183 查看
http://poj.org/problem?id=1275
题意:/article/4494905.html 这个解题报告描述的相当详细了。就不多说了;
差分约束关键是找出约束条件,然后建图。最后就是套spfa或者bellman_ford的模板就是了;
题意:/article/4494905.html 这个解题报告描述的相当详细了。就不多说了;
差分约束关键是找出约束条件,然后建图。最后就是套spfa或者bellman_ford的模板就是了;
#include <iostream> #include <cstring> #include <cstdio> #include <queue> #define maxn 25 using namespace std; struct node { int v,w; int next; }g[10*maxn]; int cnt,pre[maxn],ind[maxn],dis[maxn]; bool inq[maxn]; int R[maxn],num[26]; const int inf = 9999999; void init() { cnt = 0; memset(pre,-1,sizeof(pre)); memset(ind,0,sizeof(ind)); memset(inq,false,sizeof(inq)); } void add(int u,int v,int w) { g[cnt].v = v; g[cnt].w = w; g[cnt].next = pre[u]; pre[u] = cnt++; } bool spfa(int s) { int i; queue<int>q; for (i = 0; i < maxn; ++i) dis[i] = -inf; dis[s] = 0; q.push(s); inq[s] = true; while (!q.empty()) { int u = q.front(); q.pop(); if (++ind[u] > 24) return false; inq[u] = false; for (i = pre[u]; i != -1; i = g[i].next) { int v = g[i].v, w = g[i].w; if (dis[v] < dis[u] + w) { dis[v] = dis[u] + w; if (!inq[v]) { inq[v] = true; q.push(v); } } } } return true; } int main() { int i,t,pos,n; scanf("%d",&t); while (t--) { memset(num,0,sizeof(num)); for (i = 1; i <= 24; ++i) scanf("%d",&R[i]); scanf("%d",&n); for (i = 0; i < n; ++i) { scanf("%d",&pos); num[pos + 1]++; } int l = 0, r = n; bool flag = false; while (l < r) { init(); int mid = (l + r)>>1; for (i = 1; i <= 24; ++i) { add(i - 1,i,0); add(i,i - 1,-num[i]); } for (i = 8; i <= 24; ++i) add(i - 8,i,R[i]); for (i = 1; i <= 7; ++i) add(i + 16,i,R[i] - mid); add(0,24,mid); if (spfa(0)) { r = mid; flag = true; } else { l = mid + 1; } } if (flag) printf("%d\n",r); else printf("No Solution\n"); } return 0; }
相关文章推荐
- 差分约束小结 pku3169 1275 1716 3159 1364
- poj-1275-Cashier Employment-差分约束
- pku 3159 Candies(差分约束)
- POJ1275 Cashier Employment 【二分 + 差分约束】
- POJ 1275 Cashier Employment (差分约束 + spfa)
- poj 1275 差分约束
- 差分约束 1:pku 1201 Intervals 2:pku 1364 King 3:hdu 1534
- poj1275 Cashier Employment(差分约束)
- POJ 1275 Cashier Employment(差分约束)
- POJ 1275 Cashier Employment 差分约束
- ACM: 图论题 poj 1275 差分约束题
- POJ 1275 Cashier Employment(差分约束)
- POJ 1275 Cashier Employment 挺难的差分约束题
- PKU 1364 King 差分约束
- POJ 1275 Cashier Employment 挺难的差分约束题
- Poj1275 差分约束
- poj 1275 Cashier Employment 差分约束
- pku 3159 Candies 差分约束
- poj1275 Cashier Employment (差分约束)
- poj 1275 Cashier Employment - 差分约束 - 二分答案