题意:

若干个勇士,每个勇士只能杀特定的怪物。每个勇士只能杀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. ArcMap如何撤销配准

    ArcMap地理配准时,更新地理配准后,就没法撤销了. 如何解决呢,更新地理配准后,会在源文件夹中自动生成配准文件(文件格式为.over  .jgwx  .xml),可以通过删除这些文件来清除配准.

  2. hdu 5517 Triple

    题目链接 http://acm.hdu.edu.cn/showproblem.php?pid=5517 ------------------------------------------------ ...

  3. python包导入

    https://www.cnblogs.com/foremostxl/p/9501663.html

  4. Linux安装Apache报错:Cannot find a valid baseurl for repo: base/7/x86_64解决方案

    最近使用CentOS7学习,安装安装Apache时候,使用yum安装Apache报错:本文适合CentOS7和RHEL7 # yum install httpd 出现:cannot find a va ...

  5. Volatile 只保证可见性,并不保证原子性

    [尊重原创,转载请注明出处]http://blog.csdn.net/guyuealian/article/details/52525724   在说明Java多线程内存可见性之前,先来简单了解一下J ...

  6. Python基础篇(set集合)

    Python基础篇(set集合,深浅拷贝) set集合是Python的一个基本类型,一般是不常用.set中的元素是不重复的.无序的里边 的元素必须是可hash的比如int,str,tuple,bool ...

  7. android SharedPreferences 存储文件

  8. NFS 共享存储实战

    目录 NFS 共享存储实战 一.NFS概述 二.NFS部署 部署NFS客户端backup和web01 统一web.nfs.backup的用户权限 代码部署步骤 三.NFS配置详解 NFS存储小结 四. ...

  9. win32程序使用CString

    https://www.cnblogs.com/qingtian224/p/5833456.html uafxcwd.lib(afxmem.obj) : error LNK2005: "vo ...

  10. Java jvisualvm简要说明(转)

    转自:http://blog.csdn.net/a19881029/article/details/8432368 jvisualvm能干什么:监控内存泄露,跟踪垃圾回收,执行时内存.cpu分析,线程 ...