题目:http://poj.org/problem?id=2584

以人和衣服作为点,建立超级源点和超级汇点,人连边权为1的边,衣服对源点连边权为件数的边(别弄乱顺序);

试图写构造函数,但CE了,最后只好用冗杂的写法。

代码如下:

#include<iostream>
#include<cstdio>
#include<cstring>
#include<queue>
using namespace std;
queue<int>q;
int n,head[],ct=,d[],cur[],INF=1e9,s,t;
char dc[];
struct N{
int to,next,w;
}edge[];
//struct N{
// int next,to,w;
// N(int a=0,int b=0,int c=0):next(a),to(b),w(c) {}
//}edge[255];
int ex(char cc)
{
if(cc=='S')return ;
if(cc=='M')return ;
if(cc=='L')return ;
if(cc=='X')return ;
if(cc=='T')return ;
}
void ad(int x,int y,int z)
{
// edge[++ct]=(N){y,head[x],z};head[x]=ct;
// edge[++ct]=(N){x,head[y],0};head[y]=ct;
edge[++ct].to=y;
edge[ct].next=head[x];
edge[ct].w=z;
head[x]=ct;
edge[++ct].to=x;
edge[ct].next=head[y];
edge[ct].w=;
head[y]=ct;
// edge[++ct]=N{y,head[x],z};head[x]=ct;
// edge[++ct]=N{x,head[y],0};head[y]=ct;
}
void add(int p,char c[])
{
int x=n+ex(c[]);
int y=n+ex(c[]);
for(int i=x;i<=y;i++)ad(i,p,);
}
bool bfs()
{
memset(d,,sizeof d);
while(q.size())q.pop();
q.push();d[]=;
while(q.size())
{
int x=q.front();q.pop();
for(int i=head[x];i;i=edge[i].next)
{
int u=edge[i].to;
if(!d[u]&&edge[i].w)
{
d[u]=d[x]+;
q.push(u);
}
}
}
return d[t];
}
int dfs(int x,int f)
{
if(x==t)return f;
int res=;
for(int i=cur[x];i;i=edge[i].next)
{
int u=edge[i].to;
if(d[u]==d[x]+&&edge[i].w)
{
int tmp=dfs(u,min(edge[i].w,f-res));
edge[i].w-=tmp;
edge[i^].w+=tmp;
res+=tmp;
if(edge[i].w)cur[x]=i;
if(res==f)return f;
}
}
if(!res)d[x]=;//剪枝
return res;
}
bool dinic()
{
int ret=;
while(bfs())
{
for(int i=s;i<=t;i++)cur[i]=head[i];
ret+=dfs(s,INF);
}
if(ret==n)return ;
else return ;
}
int main()
{
while()
{
cin>>dc;
if(dc[]=='E')return ;
ct=;//!
memset(head,,sizeof head);
scanf("%d ",&n);
for(int i=;i<=n;i++)
{
cin>>dc;
add(i,dc);
}
for(int i=n+;i<=n+;i++)
{
int x;
scanf("%d",&x);
ad(,i,x);//0为超级源点
}
for(int i=;i<=n;i++)ad(i,n+,);//n+6为超级汇点
s=;t=n+;
cin>>dc;
if(dinic())printf("T-shirts rock!\n");
else printf("I'd rather not wear a shirt anyway...\n");
}
return ;
}

poj2584T-Shirt——网络最大流的更多相关文章

  1. P3376 【模板】网络最大流

    P3376 [模板]网络最大流 题目描述 如题,给出一个网络图,以及其源点和汇点,求出其网络最大流. 输入输出格式 输入格式: 第一行包含四个正整数N.M.S.T,分别表示点的个数.有向边的个数.源点 ...

  2. HDU 3549 网络最大流再试

    http://acm.hdu.edu.cn/showproblem.php?pid=3549 同样的网络最大流 T了好几次原因是用了cout,改成printf就A了 还有HDU oj的编译器也不支持以 ...

  3. 一般增广路方法求网络最大流(Ford-Fulkerson算法)

    /* Time:2015-6-18 接触网络流好几天了 写的第一个模版————Ford-Fulkerson算法 作用:求解网络最大流 注意:源点是0 汇点是1 如果题目输入的是1到n 请预处理减1 * ...

  4. 算法模板——Dinic网络最大流 2

    实现功能:同Dinic网络最大流 1 这个新的想法源于Dinic费用流算法... 在费用流算法里面,每次处理一条最短路,是通过spfa的过程中就记录下来,然后顺藤摸瓜处理一路 于是在这个里面我的最大流 ...

  5. 算法模板——Dinic网络最大流 1

    实现功能:同sap网络最大流 今天第一次学Dinic,感觉最大的特点就是——相当的白话,相当的容易懂,而且丝毫不影响复杂度,顶多也就是代码长个几行 主要原理就是每次用spfa以O(n)的时间复杂度预处 ...

  6. 图论算法-网络最大流【EK;Dinic】

    图论算法-网络最大流模板[EK;Dinic] EK模板 每次找出增广后残量网络中的最小残量增加流量 const int inf=1e9; int n,m,s,t; struct node{int v, ...

  7. 网络最大流算法—EK算法

    前言 EK算法是求网络最大流的最基础的算法,也是比较好理解的一种算法,利用它可以解决绝大多数最大流问题. 但是受到时间复杂度的限制,这种算法常常有TLE的风险 思想 还记得我们在介绍最大流的时候提到的 ...

  8. 洛谷 P3376 【【模板】网络最大流】

    题目描述 如题,给出一个网络图,以及其源点和汇点,求出其网络最大流. 输入 第一行包含四个正整数N.M.S.T,分别表示点的个数.有向边的个数.源点序号.汇点序号. 接下来M行每行包含三个正整数ui. ...

  9. 洛谷P3376 【模板】网络最大流

    题目描述 如题,给出一个网络图,以及其源点和汇点,求出其网络最大流. 输入输出格式 输入格式: 第一行包含四个正整数N.M.S.T,分别表示点的个数.有向边的个数.源点序号.汇点序号. 接下来M行每行 ...

  10. P2472 [SCOI2007]蜥蜴(网络最大流)

    P2472 [SCOI2007]蜥蜴 题目描述 在一个r行c列的网格地图中有一些高度不同的石柱,一些石柱上站着一些蜥蜴,你的任务是让尽量多的蜥蜴逃到边界外. 每行每列中相邻石柱的距离为1,蜥蜴的跳跃距 ...

随机推荐

  1. java中 ExecutorService,Executor,ThreadPoolExecutor的用法

    package com; import java.util.concurrent.BlockingQueue; import java.util.concurrent.Executor; import ...

  2. jdbc 简单连接

    package itcast; import java.sql.Connection;import java.sql.DriverManager;import java.sql.ResultSet;i ...

  3. SecureCRT的上传和下载

    securtCRT对于后台开发者并不陌生,在windows下是得力的助手.而文件从服务器上上传和下载是很基本.很日常的操作.下面就谈谈关于它的命令及操作: 借助securtCRT,使用linux命令s ...

  4. 深入Asyncio(六)Tasks and Futures

    Tasks and Futures 大多数的工作只涉及到Task.create_task()方法,就像前面代码一样,Future是Task的父类,提供与loop交互的所有功能. Future对象表示某 ...

  5. linux 更新yum源 改成163源

    安装完CentOS6.3后,为避免从国外站点安装更新速度过慢,需要更改yum更新源,所以从网上找了下更改linux yum源的方法,和大家进行下分享.原理很简单,就是把yum配置文件中的更新源改一下, ...

  6. eclipse maven安装配置

      下载在Apache下载Maven,下载地址:http://maven.apache.org/download.html,在win7下载文件为:apache-maven-3.1.0-bin.zip. ...

  7. 【转】iOS安全之RSA加密/生成公钥、秘钥 pem文件

    在iOS中使用RSA加密解密,需要用到.der和.p12后缀格式的文件,其中.der格式的文件存放的是公钥(Public key)用于加密,.p12格式的文件存放的是私钥(Private key)用于 ...

  8. http协议详解-经典篇

    本文转载至 http://www.cnblogs.com/flychen/archive/2012/11/28/2792206.html   ————————————————————————————— ...

  9. To discount or not to discount in reinforcement learning: A case study comparing R learning and Q learning

    https://www.cs.cmu.edu/afs/cs/project/jair/pub/volume4/kaelbling96a-html/node26.html [平均-打折奖励] Schwa ...

  10. Chrome性能分析工具lightHouse用法指南

    本文主要讲如何使用Chrome开发者工具linghtHouse进行页面性能分析. 1.安装插件 非常简单,点击右上角的“添加至Chrome”即可. 2.使用方式 1)打开要测试的页面,点击浏览器右上角 ...