POJ-3762-The Bonus Salary!
来源:互联网 发布:ubuntu 修改用户组 编辑:程序博客网 时间:2024/06/10 16:40
这个题跟3680一样的建图方式,只是数据处理要麻烦一点,还是跑了1000ms,看以后能否优化吧~
代码:
#include<cstdio>#include<cstring>#include<iostream>#include<algorithm>#include<queue>using namespace std;const int maxn=4100;const int maxm=30000;const int inf=1<<29;struct node{ int h; int m; int s; bool operator < (const node a)const {return h<a.h||(h==a.h&&m<a.m)||(h==a.h&&m==a.m&&s<a.s); } bool operator > (const node a)const {return h>a.h||(h==a.h&&m>a.m)||(h==a.h&&m==a.m&&s>a.s); } bool operator == (const node a)const {return h==a.h&&m==a.m&&s==a.s; }}a[maxn],b[maxn],c[maxn];int st,des,n,m,k,e,w[maxn],head[maxn],nxt[maxm],cost[maxm],flow[maxm],pnt[maxm],pre[maxn],dist[maxm];bool vis[maxn];queue<int> q;void AddEdge(int u,int v,int f,int c){ pnt[e]=v;nxt[e]=head[u];cost[e]=c;flow[e]=f;head[u]=e++; pnt[e]=u;nxt[e]=head[v];cost[e]=-c;flow[e]=0;head[v]=e++;}int Search(node a){ int l=1,r=m-1; while(l<=r) {int mid=(l+r)>>1;if(c[mid]==a) return mid;if(c[mid]<a) l=mid+1;else r=mid-1; } return -1;}bool Spfa(){ memset(dist,-1,sizeof(dist)); memset(pre,-1,sizeof(pre)); q.push(st); dist[st]=0; while(!q.empty()) {int u=q.front();q.pop();vis[u]=0;for(int i=head[u];i!=-1;i=nxt[i]){ int v=pnt[i]; if(flow[i]&&dist[v]<dist[u]+cost[i]) {dist[v]=dist[u]+cost[i];pre[v]=i;if(!vis[v]){ q.push(v); vis[v]=1;} }} } return dist[des]!=-1;}int maxflow(){ int ans=0; while(Spfa()) {int mini=inf;for(int i=pre[des];i!=-1;i=pre[pnt[i^1]]) mini=min(mini,flow[i]);for(int i=pre[des];i!=-1;i=pre[pnt[i^1]]){ flow[i]-=mini; flow[i^1]+=mini;}ans+=mini*dist[des]; } return ans;}int main(){ while(scanf("%d%d",&n,&k)!=EOF) {e=0;memset(head,-1,sizeof(head));for(int i=0;i<n;i++){ scanf("%d:%d:%d",&a[i<<1].h,&a[i<<1].m,&a[i<<1].s); scanf("%d:%d:%d",&a[i<<1|1].h,&a[i<<1|1].m,&a[i<<1|1].s); b[i<<1]=a[i<<1]; b[i<<1|1]=a[i<<1|1]; scanf("%d",&w[i]);}sort(b,b+n*2);m=1;c[m++]=b[0];for(int i=1;i<n*2;i++) if(!(b[i]==b[i-1]))c[m++]=b[i];st=0,des=m;for(int i=0;i<m;i++) AddEdge(i,i+1,k,0);for(int i=0;i<n;i++){ int x=Search(a[i<<1]); int y=Search(a[i<<1|1]); AddEdge(x,y,1,w[i]);}printf("%d\n",maxflow()); } return 0;}
- POJ-3762-The Bonus Salary!
- poj 3762 The Bonus Salary! 需离散化
- 【POJ】 3762 The Bonus Salary! 离散 + 费用流
- POJ 3762 The Bonus Salary!(最小K覆盖)
- POJ 3762 The Bonus Salary! 最小费用最大流
- POJ 3762 The Bonus Salary!(费用流)
- POJ 3762 The Bonus Salary!(区间k覆盖问题)
- The Bonus Salary! (poj 3762 离散化+最小费用流)
- poj3762 The Bonus Salary! (mcmf 区间K覆盖问题)
- salary
- salary
- salary
- Larry Lang, The Chinese Salary, House Price, Innovation, and More
- eCryptfs - Bonus
- 【USACO Contest】Holiday 2010 Bonus Competition, Problem 3: Driving Out the Piggies (dotp)
- 题目:SQL编程题 三、SQL编程题 员工表emp:员工编号eid,姓名ename,工作职位title,雇佣日期hiretime,工资salary,奖金bonus,部门 depart 部门表dept
- salary图
- salary 图
- C++11的语法新特性
- VS2012快捷键
- xml作用 Input类型
- HDU4540+DP
- C++ 数组指针 二维指针 指针数组
- POJ-3762-The Bonus Salary!
- c++友元类
- configure: error: C++ preprocessor "/lib/cpp" fails sanity check
- 多线程编程中条件变量和虚假唤醒(spurious wakeup)的讨论
- android 捕捉异常
- [LeetCode]Jump Game II、Jump Game
- oracle数据类型
- 子对话框获取父对话框句柄几种解决方法
- Lock_sga 和 pre_page_sga 参数详解