题意:

若干个勇士,每个勇士只能杀特定的怪物。每个勇士只能杀1个怪,但是有一些药,喝了药之后能再杀一个,每个勇士只能喝一瓶药。问你最多杀多少怪。

题解:

按照如下建图套网络流板即可。

网上有题解说套DinicT了,我们队套kuangbin的dinic过了,不得不说kuangbin的板质量真的好。

#include<bits/stdc++.h>
using namespace std;
#define ll long long
#define MAXN 1500 //最大点数
#define MAXM 1200010 //最大变数
const int INF=0x3f3f3f3f;
#define mem(a,b) memset(a,b,sizeof a)
#define dbg(x) cout<<#x<<"="<<x<<endl
struct Edge{
int to,nxt,cap,flow;
}edge[MAXM];
int tol;
int head[MAXN];
void init()
{
tol=;
mem(head,-);
}
void add(int u,int v,int w,int rw=)
{
edge[tol].to=v,edge[tol].cap=w,edge[tol].flow=,edge[tol].nxt=head[u],head[u]=tol++;
edge[tol].to=u,edge[tol].cap=rw,edge[tol].flow=,edge[tol].nxt=head[v],head[v]=tol++;
}
int Q[MAXN];
int dep[MAXN],cur[MAXN],sta[MAXN];
bool bfs(int s,int t,int n)
{
int front=,tail=;
mem(dep,-);
dep[s]=;
Q[tail++]=s;
while(front<tail)
{
int u=Q[front++];
for(int i=head[u];i!=-;i=edge[i].nxt)
{
int v=edge[i].to;
if(edge[i].cap>edge[i].flow&&dep[v]==-)
{
dep[v]=dep[u]+;
if(v==t) return true;
Q[tail++]=v;
}
}
}
return false;
}
int dinic(int s,int t,int n)
{
int maxflow=;
while(bfs(s,t,n))
{
for(int i=;i<n;++i) cur[i]=head[i];
int u=s,tail=;
while(cur[s]!=-)
{
if(u==t)
{
int tp=INF;
for(int i=tail-;i>=;i--)
{
tp=min(tp,edge[sta[i]].cap-edge[sta[i]].flow);
}
maxflow+=tp;
for(int i=tail-;i>=;i--)
{
edge[sta[i]].flow+=tp;
edge[sta[i]^].flow-=tp;
if(edge[sta[i]].cap-edge[sta[i]].flow==) tail=i;
}
u=edge[sta[tail]^].to;
}
else if(cur[u]!=-&&edge[cur[u]].cap>edge[cur[u]].flow&&dep[u]+==dep[edge[cur[u]].to])
{
sta[tail++]=cur[u];
u=edge[cur[u]].to;
}
else{
while(u!=s&&cur[u]==-) u=edge[sta[--tail]^].to;
cur[u]=edge[cur[u]].nxt;
}
}
}
return maxflow;
}
int main()
{
ios::sync_with_stdio(false);
int n,m,k;
init();
cin>>n>>m>>k;
add(,,INF),add(,,k);
for(int i=;i<=n;++i) add(,i+,),add(,i+,);
for(int i=;i<=n;++i)
{
int x,y;
cin>>x;
for(int j=;j<=x;++j)
{
cin>>y;
add(i+,y+n+,);
}
}
for(int i=n+;i<=n+m+;++i) add(i,n+m+,);
cout<<dinic(,n+m+,n+m+)<<endl;
}

2018icpc南京/gym101981 I Magic Potion的更多相关文章

  1. 2018 ACM/ICPC 南京 I题 Magic Potion

    题解:最大流板题:增加两个源点,一个汇点.第一个源点到第二个源点连边,权为K,然后第一个源点再连其他点(英雄点)边权各为1,然后英雄和怪物之间按照所给连边(边权为1). 每个怪物连终点,边权为1: 参 ...

  2. 2018icpc南京/gym101981 G Pyramid 找规律

    题意: 数一个金字塔里面有多少个正三角形. 题解: ans[n]=n*(n-1)*(n-2)*(n-3)/24 #include<bits/stdc++.h> using namespac ...

  3. 2018icpc南京/gym101981 K Kangaroo Puzzle 随机化

    题意: 有一个棋盘上,1是空格,0是障碍物,一开始每个空格里都有一只袋鼠,你可以命令所有袋鼠一起向上下左右一个方向走一格,一旦碰到边界或障碍物,袋鼠就不动,如果它后面有袋鼠这两个袋鼠就会挤进一个格子, ...

  4. 2018icpc南京/gym101981 A Adrien and Austin 博弈

    题意: n个连续排列的石子,每次只许拿连续的(中间没有空格)的k个,问你谁必胜 题解: 简单博弈,特判总数为0,k=1两种情况,其他情况先拿必胜,方法是拿掉中间的,然后对方怎么拿你镜面拿就行. #in ...

  5. hdu4149 Magic Potion

    Magic Potion Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65535/32768 K (Java/Others)Tota ...

  6. Gym 101981I - Magic Potion - [最大流][2018-2019 ACM-ICPC Asia Nanjing Regional Contest Problem I]

    题目链接:http://codeforces.com/gym/101981/attachments There are n heroes and m monsters living in an isl ...

  7. 2018ICPC南京网络赛

    2018ICPC南京网络赛 A. An Olympian Math Problem 题目描述:求\(\sum_{i=1}^{n} i\times i! \%n\) solution \[(n-1) \ ...

  8. Magic Potion(最大流,跑两遍网络流或者加一个中转点)

    Magic Potion http://codeforces.com/gym/101981/attachments/download/7891/20182019-acmicpc-asia-nanjin ...

  9. Gym101981I Magic Potion(最大流)

    Problem I. Magic Potion There are n heroes and m monsters living in an island. The monsters became v ...

随机推荐

  1. 测开之路四十八:Django之重定向与cookie

    基础配置与上一篇一致 404错误 定义一个error页面 <!DOCTYPE html><html lang="en"><head> <m ...

  2. iOS OpenGL ES简单绘制三角形

    OpenGL 是用于2D/3D图形编程的一套基于C语言的统一接口. windows,Linux,Unix上均可兼容. OpenGL ES 是在OpenGL嵌入式设备上的版本, android/iOS ...

  3. git开发实战:认识git

    git简介: git是分布式版本控制系统,相比较svn相比,git会在本地保存完整的提交记录,即使远程服务器宕机数据消失,可以将本地分支提交到远程服务器,本地分支会保存完整的记录.只要文件提交到git ...

  4. CentOS 7下升级python版本到3.X

    由于python官方已宣布2.x系列即将停止支持,为了向前看,我们升级系统的python版本为3.x系列服务器系统为当前最新的CentOS 7.4 1.安装前查看当前系统下的python版本号 # p ...

  5. AtCoder ABC 140E Second Sum

    题目链接:https://atcoder.jp/contests/abc140/tasks/abc140_e 题目大意 给定一个 1~N 的排列 P. 定义$X_{L, R}$的值为$P_L, P_{ ...

  6. upc组队赛14 As rich as Crassus【扩展中国剩余定理】

    As rich as Crassus 题目链接 题目描述 Crassus, the richest man in the world, invested some of his money with ...

  7. vue基础学习一

    写一个例子,告诉你VUE的方便之处,就是双向绑定,不需要操作DOM对象,而是操作数据 div中msg 和JS中msg是一一对应的 然后看浏览器中 然后如果我想改变浏览器中值,我在console这么操作 ...

  8. redis缓存架构-02-两种持久化机制(RDB和AOF)

    1.两种持久化机制的介绍 1.1 RDB 周期性的生成redis内存数据的一份完整的快照 1)根据配置的检查点,生产rdb快照文件,fork一个子线程,将数据dump到rdb快照文件中,完成rdb文件 ...

  9. SQL数据库—<7>事务、异常和游标

    事务 一.什么是事务能够保证数据的一致性的代码控制,要么执行提交,要么滚回事务的初始状态 二.事务的四大特性:ACIDA:原子性-------事务不可拆开,要么执行要么回滚无中间状态C:一致性---- ...

  10. 拓展练习部分---打包压缩 及 RPM工具

    目录 打包压缩部分 1.linux下常见的压缩包类型有哪些 rpm 工具部分 打包压缩部分 1.linux下常见的压缩包类型有哪些 .zip .gz 会删除源文件 .bz2 会删除源文件 .tar.g ...