POJ2584 T-Shirt Gumbo——网络最大流模板
题目:http://poj.org/problem?id=2584
像模板一样的简单题。继续使用 & 的当前弧优化和神奇的构造函数。
#include<iostream>
#include<cstdio>
#include<cstring>
#include<queue>
using namespace std;
int n,head[],dfn[],cur[],l,r,mxflow,xnt,x,t;
const int INF=;
char tmp[],tm1,tm2;
struct Edge{
int next,to,cap;
Edge(int a=,int b=,int c=):next(a),to(b),cap(c) {}
}edge[];
queue<int> q;
int num(char c)
{
if(c=='S')return +n;if(c=='L')return +n;
if(c=='M')return +n;if(c=='X')return +n;if(c=='T')return +n;
}
bool bfs()
{
memset(dfn,,sizeof dfn);
while(!q.empty())q.pop();
dfn[]=;
q.push();
while(!q.empty())
{
int k=q.front();q.pop();
for(int i=head[k],v;i;i=edge[i].next)
if(!dfn[v=edge[i].to]&&edge[i].cap)
{
dfn[v]=dfn[k]+;
q.push(v);
if(v==t)break;
}
}
return dfn[t];
}
int dfs(int k,int flow)
{
if(k==t)return flow;
int used=;
for(int& i=cur[k],v;i;i=edge[i].next)
if(dfn[v=edge[i].to]==dfn[k]+&&edge[i].cap)
{
int tmp=dfs(v,min(flow-used,edge[i].cap));
if(!tmp)dfn[v]=;
used+=tmp;
edge[i].cap-=tmp;
edge[i^].cap+=tmp;
if(used==flow)return used;
}
return used;
}
int main()
{
while()
{
cin>>tmp;
if(tmp[]=='E')return ;
scanf("%d ",&n);
memset(head,,sizeof head);
t=n+;mxflow=;xnt=;
for(int i=;i<=n;i++)
{
edge[++xnt]=Edge(head[],i,);head[]=xnt;
edge[++xnt]=Edge(head[i],,);head[i]=xnt;
scanf("%c%c ",&tm1,&tm2);
l=num(tm1);r=num(tm2);
for(int j=l;j<=r;j++)
{
edge[++xnt]=Edge(head[i],j,);head[i]=xnt;
edge[++xnt]=Edge(head[j],i,);head[j]=xnt;
}
}
for(int i=+n;i<=+n;i++)
{
scanf("%d",&x);
edge[++xnt]=Edge(head[i],t,x);head[i]=xnt;
edge[++xnt]=Edge(head[t],i,);head[t]=xnt;
}
cin>>tmp;
while(bfs())
{
memcpy(cur,head,sizeof head);
mxflow+=dfs(,INF);
}
if(mxflow==n)
printf("T-shirts rock!\n");
else printf("I'd rather not wear a shirt anyway...\n");
}
}
POJ2584 T-Shirt Gumbo——网络最大流模板的更多相关文章
- 【Luogu】P3376网络最大流模板(Dinic)
最大流模板成为另一个被攻克的模板题. 今天QDC给我讲了一下Dinic,感觉很好懂.于是为了巩固就把这道题A掉了. 核心思想就是不断BFS分层,然后不断DFS找增广路.找不到之后就可以把答案累加输出了 ...
- P3376 网络最大流模板(Dinic + dfs多路增广优化 + 炸点优化 + 当前弧优化)
### P3376 题目链接 ### 这里讲一下三种优化的实现以及正确性. 1.dfs多路增广优化 一般的Dinic算法中是这样的,bfs() 用于标记多条增广路,以至于能一次 bfs() 出多次 d ...
- 图论算法-网络最大流【EK;Dinic】
图论算法-网络最大流模板[EK;Dinic] EK模板 每次找出增广后残量网络中的最小残量增加流量 const int inf=1e9; int n,m,s,t; struct node{int v, ...
- P3376 【模板】网络最大流
P3376 [模板]网络最大流 题目描述 如题,给出一个网络图,以及其源点和汇点,求出其网络最大流. 输入输出格式 输入格式: 第一行包含四个正整数N.M.S.T,分别表示点的个数.有向边的个数.源点 ...
- 洛谷 P3376 【【模板】网络最大流】
题目描述 如题,给出一个网络图,以及其源点和汇点,求出其网络最大流. 输入 第一行包含四个正整数N.M.S.T,分别表示点的个数.有向边的个数.源点序号.汇点序号. 接下来M行每行包含三个正整数ui. ...
- 洛谷 P3376 【模板】网络最大流
题目描述 如题,给出一个网络图,以及其源点和汇点,求出其网络最大流. 输入输出格式 输入格式: 第一行包含四个正整数N.M.S.T,分别表示点的个数.有向边的个数.源点序号.汇点序号. 接下来M行每行 ...
- 洛谷——P3376 【模板】网络最大流
题目描述 如题,给出一个网络图,以及其源点和汇点,求出其网络最大流. 输入输出格式 输入格式: 第一行包含四个正整数N.M.S.T,分别表示点的个数.有向边的个数.源点序号.汇点序号. 接下来M行每行 ...
- P3376 【模板】网络最大流dinic算法
P3376 [模板]网络最大流 题目描述 如题,给出一个网络图,以及其源点和汇点,求出其网络最大流. 输入输出格式 输入格式: 第一行包含四个正整数N.M.S.T,分别表示点的个数.有向边的个数.源点 ...
- 「LuoguP3376」 【模板】网络最大流
题目描述 如题,给出一个网络图,以及其源点和汇点,求出其网络最大流. 输入输出格式 输入格式: 第一行包含四个正整数N.M.S.T,分别表示点的个数.有向边的个数.源点序号.汇点序号. 接下来M行每行 ...
随机推荐
- httpclient妙用一 httpclient作为客户端调用soap webservice(转)
前面有一篇使用HttpClient调用带参数的post接口方法,这里找到一篇使用HttpClient调用Soap协议接口的方式. 原文地址:httpclient妙用一 httpclient作为客户端调 ...
- POJ 2352 treap
当年经常遇到这种题,愣是没做出来,好像那时不会线段树,也不会平衡树. 凭借一身蛮力来搞,倒是和那群朋友搞得开开心心. 题意: y从小到大,若y相同,x从小到大,这样给出一些坐标,求每个点覆盖的点个数. ...
- PHP:第二章——PHP中的for语句
知识点一:for语句 语法格式: for(expr1;expr2;expr3){ //代码块; } 说明: expr1:循环开始前,无条件的执行一次,并 ...
- UVALive 5107 dfs暴力搜索
题目链接:A hard Aoshu Problem DES:给三个字符串,包含的字符是A-E范围内的.长度都不超过8.每个字符可以而且只可以匹配一个数字.两个字符不能匹配相同的数字.前两个式子之间可以 ...
- ASP.NET MVC4 Razor
2014-09-18 14:06 by 易code, 2854 阅读, 0 评论, 收藏, 编辑 1 Code Expressions 代码表达式 @表达式 or @(Expressions ) ...
- 主席树模板(poj 2104&&poj2761)
主席树,就是n个线段树,用nlonn的空间实现 首先建立第一个线段树 把要查询的值离散化,建立值的线段树 每一次加入一个点 显然每一次只会修改logn个点 把其他的点直接建边连接即可 代码: #inc ...
- python字典{}大括号
#字典 info = { 'name1':'jack', 'name2':'rose', 'name3':'tom', 'name4':'jerry', 'name5':'james' } info[ ...
- sublime text3的快捷键
Ctrl + Shift + P 调出命令板(Command Palette) Ctrl + ` 调出控制台 Ctrl + D 选择当前光标所在的词并高亮该词所有出现的位置,再次 C ...
- 线程局部存储TLS
1 .使用线程局部存储的理由 当我们希望这个进程的全局变量变为线程私有时,而不是所有线程共享的,也就是每个线程拥有一份副本时,这时候就可以用到线程局部存储(TLS,Thread Local Stora ...
- Python与系统的交互方式
本节内容 os与commands模块 subprocess模块 subprocess.Popen类 总结 我们几乎可以在任何操作系统上通过命令行指令与操作系统进行交互,比如Linux平台下的shell ...