传送门

  

  题意:n个人排队买票,要把他们拆成k条队到k个窗口买,可以有队伍为空,每条队的顺序保持拆之前的顺序。如果某人和他前一个人买的票相同,就可以打八折,求最小花费。

  题解:拆成k条队意味着只有[n-k,n-1]组前后关系,那么可以转成二分图最大权匹配,流的时候限制流量在[n-k,n-1]间就可以了。

#include<map>
#include<queue>
#include<string>
#include<cstdio>
#include<cstring>
#include<algorithm>
#define MAXN 5300
#define MAXM 35000
using namespace std; struct na{
int y,z,f,ne;
};
int n,m,k,l[MAXN],r[MAXN],num=,p,ch,S,T,dis[MAXN],mi[MAXN],ro[MAXN],qi[MAXN],no,v[MAXN],R[MAXN],Ro[][],li[];
na b[MAXM];
bool bo[MAXN];
const int INF=1e9;
int mmh=,an=;
queue<int> q;
inline int min(int x,int y){return x>y?y:x;}
inline void spfa(){
register int i;
q.push(S);
bo[S]=;
for (i=;i<=no;i++) dis[i]=INF;
mi[S]=INF;dis[S]=;dis[T]=INF;
while(!q.empty()){
int k=q.front();q.pop();bo[k]=;
if (k==T) continue;
for (i=l[k];i;i=b[i].ne){
if (b[i].z>&&dis[b[i].y]>b[i].f+dis[k]){
dis[b[i].y]=b[i].f+dis[k];
mi[b[i].y]=min(mi[k],b[i].z);
ro[b[i].y]=i;
qi[b[i].y]=k;
if (!bo[b[i].y]){
bo[b[i].y]=;
q.push(b[i].y);
}
}
}
}
}
inline int read(){
p=;ch=getchar();
while (ch<''||ch>'') ch=getchar();
while (ch>=''&&ch<='') p=p*+ch-, ch=getchar();
return p;
}
inline void add(int x,int y,int z,int f){
num++;
if (l[x]==) l[x]=num;else b[r[x]].ne=num;
b[num].y=y;b[num].z=z;b[num].f=f;r[x]=num;
}
inline void in(int x,int y,int z,int f){
add(x,y,z,f);add(y,x,,-f);
}
map<string,int> ma;
char s[];
int main(){
register int i,j;
n=read();m=read();k=read();S=;no=T=n+n+;
for (i=;i<=k;i++){
scanf("%s",s);
ma[string(s)]=i;
v[i]=read();
}
for (i=;i<=n;i++) scanf("%s",s),R[i]=ma[string(s)],mmh+=v[R[i]],in(S,i,,),in(i+n,T,,);
for (i=;i<=n;i++)
for (j=i+;j<=n;j++) in(i,j+n,,R[i]==R[j]?-v[R[j]]:),Ro[i][j]=num-;
for (int f=;;f++){
spfa();
if (dis[T]==INF) break;
if (dis[T]>=&&f>=n-m) break;
an+=mi[T]*dis[T];
for (i=T;i;i=qi[i]) b[ro[i]].z-=mi[T],b[((ro[i]-)^)+].z+=mi[T];
}
printf("%lf\n",.*mmh+0.2*an);
int s=;
for (i=;i<=n;i++){
for (j=;j<i;j++)
if (b[Ro[j][i]].z==) break;
if (j==i) li[i]=++s;else li[i]=li[j];
printf("%d\n",li[i]);
}
}

hackerrank Ticket的更多相关文章

  1. [Kerberos] User Ticket Management

    Kerberos客户端常用命令包括 kinit, klist, kdestroy, and kpasswd,用户使用这些命令管理自己的 ticket. 此外,每台运行Kerberos的机器应该都配置/ ...

  2. 日常小测:颜色 && Hackerrank Unique_colors

    题目传送门:https://www.hackerrank.com/challenges/unique-colors 感谢hzq大神找来的这道题. 考虑点分治(毕竟是路经统计),对于每一个颜色,它的贡献 ...

  3. 實際案例: 獲取臨時票証 (JsApi Ticket)

    專案中選用大名鼎鼎的 Senparc 微信開發套件 獲取臨時票證處理常式的程式碼 (GetgVXinInfo.ashx) using Senparc.Weixin; using Senparc.Wei ...

  4. Gitblit中采用Ticket模式进行协作开发

    Git目前的代码分支管理模型中,比较主要的有Git-Flow.Github Pull Request.大家日常或多或少都在用着. 在不想安装Gitlab这种重量级的环境的情况下,如果是利用git一步步 ...

  5. Buy the Ticket{HDU1133}

    Buy the TicketTime Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total ...

  6. HackerRank "Square Subsequences" !!!

    Firt thought: an variation to LCS problem - but this one has many tricky detail. I learnt the soluti ...

  7. HackerRank "Minimum Penalty Path"

    It is about how to choose btw. BFS and DFS. My init thought was to DFS - TLE\MLE. And its editorial ...

  8. HackerRank "TBS Problem" ~ NPC

    It is marked as a NPC problem. However from the #1 code submission (https://www.hackerrank.com/Charl ...

  9. 基于ticket的rw锁

    代码: wiredtiger-2.8.0/src/os_posix/os_mtx_rw.c rw锁结构 struct { uint16_t writers; // Now serving for wr ...

随机推荐

  1. 【java设计模式】【创建模式Creational Pattern】工厂方法模式Factory Method Pattern(多态性工厂模式Polymorphic Factory Pattern、虚拟构造子模式Virtual Constructor Pattern)

    public class Test { public static void main(String[] args){ Creator ca=new ConcreteCreatorA(); ca.cr ...

  2. 小白的Python之路 day4 生成器

    一.列表生成式  看下面例子: 列表生成式的作用:主要是让代码更简洁(还有装X的效果) 二.生成器 通过列表生成式,我们可以直接创建一个列表.但是,受到内存限制,列表容量肯定是有限的.而且,创建一个包 ...

  3. ArcGIS API for JavaScript 4.3学习笔记[新] AJS4.3和AJS3.20新特性

    今天"ArcGIS极客说"公众号推送了这两个大版本的更新,吓得我赶紧撸了一篇新博客. 这里就不写代码验证了,作为新特性小节简单介绍一下!~ AJS 4.3 1. 更强大的Featu ...

  4. bzoj 3718: [PA2014]Parking

    Description 你的老板命令你将停车场里的车移动成他想要的样子. 停车场是一个长条矩形,宽度为w.我们以其左下角顶点为原点,坐标轴平行于矩形的边,建立直角坐标系.停车场很长,我们可以认为它一直 ...

  5. nova创建虚拟机源码分析系列之五 nova源码分发实现

    前面讲了很多nova restful的功能,无非是为本篇博文分析做铺垫.本节说明nova创建虚拟机的请求发送到openstack之后,nova是如何处理该条URL的请求,分析到处理的类. nova对于 ...

  6. HTML知识点记录

    1.input的type设置为file时,设置multiple属性可以同时选择多个文件.

  7. Mysql数据库重要知识点(知了堂学习心得)

    Mysql数据库知识点 1.管理数据库语句: 使用数据库: use test; 添加数据库: create database 数据库名; create database test; 修改数据库: al ...

  8. .net 委托的使用方法以及使用委托的好处

    使用方法: //无返回值无参数委托的定义方法 public delegate void NoReturnPara(); 给委托赋值的几种方式 //实例化委托,并传入方法 NoReturbNoPara ...

  9. Lucene分词停用词库stopwords

    ! " $ % & ' ( ) * + , - -- . .. ... ...... ................... ./ .一 .数 .日 / // 0 1 2 3 4 5 ...

  10. Android SDK Manager配置

    Android SDK Manager就是一个Android软件开发工具包管理器,就像一个桥梁,连通本地和服务器,从服务器下载安卓开发所需工具到本地. 而AVD Manager是一个Android虚拟 ...