poj 1275 Cashier Employment(差分约束#6)
来源:互联网 发布:软件销售代理商 编辑:程序博客网 时间:2024/05/01 16:24
此题约束条件较多。
#include <cstdio>#include <algorithm>#include <cstdlib> #include <cstring> #define N 30 #define M 100 #define MAXQ 10000 using namespace std; const int inf = (-1u >> 1); int R[24], t[24];int s[N];int d[N], first[N];int u[M], v[M] , w[M], next[M]; bool inq[N];int cnt[N]; int e;int q[MAXQ]; void addE(int x, int y, int c){ next[e] = first[x], first[x] = e; u[e] = x, v[e] = y; w[e] = c; e++;}void init(int sum){ e = 0; for (int i = 0; i <= 24; i++) first[i] = -1; for (int i = 0; i < 16; i++) { addE(i, i + 8, R[i + 8]); } for (int i = 16; i < 24; i++) { addE(i, (i + 8)%24, R[(i + 8)% 24] - sum); } for (int i = 0; i < 23; i++) { addE(i, i + 1, 0); addE(i + 1, i, -t[i + 1]); } addE(24, 0, 0); addE(0, 24, -t[0]); addE(24, 23, sum);} bool SPFA(int s, int n, int sum){ for (int i = 0; i < n; i++)d[i] = -inf; memset(cnt, 0, sizeof(cnt)); d[s] = 0; int qs, qe; qs = qe = 0; for (int i = 0; i < n; i++)inq[i] = false; q[qe++] = s; while (qs < qe) { int x = q[qs++]; inq[x] = false; for (int e = first[x]; e != -1; e = next[e])if (d[v[e]] < d[u[e]] + w[e]) { d[v[e]] = d[u[e]] + w[e]; if (!inq[v[e]]) { inq[v[e]] = true; q[qe++] = v[e]; if (++cnt[v[e]] >= n)return false; } } } return true;} int main(){ int ca; scanf("%d", &ca); int m; // FILE* fp = fopen("in.txt", "r"); while (ca--) { for (int i = 0; i < 24; i++) { scanf( "%d", R + i); } scanf( "%d", &m); int tmp; memset(t, 0, sizeof(t)); for (int i = 0; i < m; i++) { scanf( "%d", &tmp); t[tmp]++; } bool flag = false; int l = 0, r = m + 1; int mid , ans = -1; while (l + 1 < r) { mid = ((l + r) / 2); init(mid); flag = SPFA(24, 25, mid); if (flag) r = mid, ans = mid; else l = mid; } if ( ans > 0 && ans < m + 1)printf("%d\n", ans); else puts("No Solution"); } return 0;}
- POJ--1275[Cashier Employment] 差分约束
- poj-1275-Cashier Employment-差分约束
- poj 1275 Cashier Employment 差分约束
- POJ 1275 Cashier Employment 差分约束
- poj 1275 Cashier Employment(差分约束#6)
- POJ 1275 Cashier Employment(差分约束系统)
- POJ 1275 Cashier Employment(差分约束)#by zh
- POJ 1275-Cashier Employment(差分约束系统)
- POJ 1275--Cashier Employment【差分约束,经典建边】
- 差分约束学习(二)POJ 1275:Cashier Employment
- POJ 1275Cashier Employment (差分约束 + spfa)
- poj——1275 Cashier Employment 差分约束系统
- POJ 1275 Cashier Employment(差分约束系统+二分)
- POJ 1275 Cashier Employment(差分约束)
- Cashier Employment poj 1275 差分约束系统
- POJ 1275 Cashier Employment 出纳员问题 差分约束系统
- POJ 1275 Cashier Employment(差分约束 建模 二分)
- poj 1275--Cashier Employment【差分约束系统】
- 访问者模式(Visitor Pattern)
- Oracle 查看有哪些表被锁住
- xss漏洞和csrf漏洞防御
- shader与cg简介
- String 类型与 char 类型比较
- poj 1275 Cashier Employment(差分约束#6)
- EventAction和subscription的配置过程
- java内存泄露
- 程序员人生规划
- POJ 2983 Is the Information Reliable?(差分约束#7)
- nginx中hash表的设计与实现
- lambda表达式的一个简单示例
- 编译安装ffmpeg以支持mp3,x264等
- linux重启网络、时间同步、nfs服务等