读题比做题难系列……

poj1087

输入n,代表插座个数,接下来分别输入n个插座,字母表示。把插座看做最大流源点,连接到一个点做最大源点,流量为1。

输入m,代表电器个数,接下来分别输入m个电器,字符串表示。把电器看做最大流终点,连接到一个点做最大汇点,流量为1。

输入k,代表转换器个数,接下来分别输入k个转换器,每个插座输入两个字母a,b表示a可以连在b上。把转换器看做流,b->a,因为转换器无限提供,流量为无限大

代码:

#include <iostream>
#include <cstdio>
#include <cstring>
#include <queue>
#include <map>
#include <algorithm>
#include <string> using namespace std; const int N = 505;
const int INF = 0x7fffffff; map<string, int>mymap; int cap[N][N];
string str[N];
int flow[N];
int pre[N]; queue<int> q; int BFS(int src, int des)
{
int i;
while (!q.empty()) q.pop();
for (i = 1; i <= des; ++i) pre[i] = -1;
pre[src] = 0;
q.push(src);
flow[src] = INF;
while (!q.empty()) {
int index = q.front();
q.pop();
if (index == des) break;
for (i = 1; i <= des; ++i) {
if (pre[i] == -1 && cap[index][i] > 0) {
pre[i] = index;
flow[i] = min(flow[index], cap[index][i]);
q.push(i);
}
}
}
if (pre[des] == -1) return -1;
return flow[des];
} int maxFlow(int src, int des)
{
int ans = 0;
int in = 0;
while ((in = BFS(src, des)) != -1) {
int k = des;
while (k != src) {
int last = pre[k];
cap[last][k] -= in;
cap[k][last] += in;
k = last;
}
ans += in;
}
return ans;
} int main()
{
int n, m, k, i;
int cnt = 1;
string str1,str2;
cin >> n;
for (i = 1; i <= n; ++i) {
cin >> str1;
mymap[str1] = ++cnt;
cap[1][cnt] = 1;
}
cin >> m;
for (i = 1; i <= m; ++i) {
cin >> str[i] >> str2;
if (!mymap[str[i]]) mymap[str[i]] = ++cnt;
if (!mymap[str2]) mymap[str2] = ++cnt;
cap[mymap[str2]][mymap[str[i]]] = 1; }
cin >> k;
for (i = 1; i <= k; ++i) {
cin >> str1 >> str2;
if (!mymap[str1]) mymap[str1] = ++cnt;
if (!mymap[str2]) mymap[str2] = ++cnt;
cap[mymap[str2]][mymap[str1]] = INF;
}
++cnt;
for (i = 1; i <= m; ++i) {
cap[mymap[str[i]]][cnt] = 1;
}
cout << m - maxFlow(1, cnt);
return 0;
}

  

poj 1459

配个良心的地址,读起题来容易些:http://www.2cto.com/kf/201502/377406.html

方法和上题相同,最大源点连到发电站,流量就是发电站的最大电量,用户同理。

#include <cstdio>
#include <cstring>
#include <iostream>
#include <algorithm>
#include <queue> using namespace std; const int N = 105;
const int INF = 0x7fffffff; int n, np, nc, m; int flow[N];
int cap[N][N];
int pre[N]; queue<int>q; int BFS(int src, int des)
{
while (!q.empty()) {
q.pop();
}
for (int i = 0; i <= des; ++i) {
pre[i] = -1;
}
flow[src] = INF;
pre[src] = 0;
q.push(src);
while (!q.empty()) {
int index = q.front();
q.pop();
if (index == des) {
break;
}
for (int i = 1; i <= des; ++i) {
if (pre[i] == -1 && cap[index][i] > 0) {
pre[i] = index;
flow[i] = min(cap[index][i], flow[index]);
q.push(i); //<---经常忘记这句!
}
}
}
if (pre[des] == -1) {
return -1;
}
return flow[des];
} int maxFlow(int src, int des)
{
int ans = 0;
int in = 0;
while ((in = BFS(src, des)) != -1) {
int k = des;
while (k != src) {
int last = pre[k];
cap[last][k] -= in;
cap[k][last] += in;
k = last;
}
ans += in;
}
return ans;
} int main()
{
int i;
while (scanf("%d%d%d%d", &n, &np, &nc, &m) != EOF) {
memset(cap, 0, sizeof cap);
memset(flow, 0, sizeof flow);
int u, v, z; for (i = 0; i < m; ++i) {
scanf(" (%d,%d)%d", &u, &v, &z);
cap[u + 1][v + 1] += z;
}
for (i = 0; i < np; ++i) { // power station
scanf(" (%d)%d", &u, &z);
cap[0][u + 1] = z;
}
for (i = 0; i < nc; ++i) { // consumer
scanf(" (%d)%d", &u, &z);
cap[u + 1][n + 1] = z;
}
printf("%d\n", maxFlow(0, n + 1));
}
return 0;
}

不明白为什么scanf的格式匹配会死循环,大概是回车的问题= =,加个空格就好了。

poj1087 A Plug for UNIX & poj1459 Power Network (最大流)的更多相关文章

  1. POJ1459 Power Network —— 最大流

    题目链接:https://vjudge.net/problem/POJ-1459 Power Network Time Limit: 2000MS   Memory Limit: 32768K Tot ...

  2. poj1459 Power Network --- 最大流 EK/dinic

    求从电站->调度站->消费者的最大流,给出一些边上的容量.和电站和消费者能够输入和输出的最大量. 加入一个超级源点和汇点,建边跑模板就能够了. 两个模板逗能够. #include < ...

  3. POJ1087 A Plug for UNIX —— 最大流

    题目链接:https://vjudge.net/problem/POJ-1087 A Plug for UNIX Time Limit: 1000MS   Memory Limit: 65536K T ...

  4. POJ1087 A Plug for UNIX(网络流)

                                       A Plug for UNIX Time Limit: 1000MS   Memory Limit: 65536K Total S ...

  5. POJ1087:A Plug for UNIX(最大流)

    A Plug for UNIX 题目链接:https://vjudge.net/problem/POJ-1087 Description: You are in charge of setting u ...

  6. poj1459 Power Network (多源多汇最大流)

    Description A power network consists of nodes (power stations, consumers and dispatchers) connected ...

  7. POJ1459 Power Network(网络最大流)

                                         Power Network Time Limit: 2000MS   Memory Limit: 32768K Total S ...

  8. POJ1087 A Plug for UNIX 【最大流】

    A Plug for UNIX Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 13855   Accepted: 4635 ...

  9. POJ1459 - Power Network

    原题链接 题意简述 原题看了好几遍才看懂- 给出一个个点,条边的有向图.个点中有个源点,个汇点,每个源点和汇点都有流出上限和流入上限.求最大流. 题解 建一个真 · 源点和一个真 · 汇点.真 · 源 ...

随机推荐

  1. 1.Bloom filter

    Bloom filter 是由 Howard Bloom 在 1970 年提出的二进制向量数据结构,它具有很好的空间和时间效率,被用来检测一个元素是不是集合中的一个成员,这种检测只会对在集合内的数据错 ...

  2. 在Windowx下创建以点开头的.hatccess文件

    转自:在Windowx下创建以点开头的.hatccess文件 Windows有些目录名是不能创建的,有一些文件按照常规方式也是不能创建的,如在Windows下创建文件夹名为con的目录就不行,在win ...

  3. Oracle SQL tuning 步骤

    Oracle SQL tuning 步骤 SQL是的全称是Structured Query Language(结构化查询语言).SQL是一个在80年代中期被使用的工业标准数据库查询语言.不要把SQL语 ...

  4. ORMBase对象/关系型数据库映射在MVC中的应用

    ORM这个字眼在我们操作数据库的时候,是我们使用频率最高的.它到底是个什么东西呢,我们先来看看一些对它的含义解释. 对象/关系数据库映射(object/relational mapping(ORM)) ...

  5. HDU - 3594 Cactus

    这是一个有向仙人掌的题目,要求判定给定的图是不是强连通图,而且每一条边只能出现在一个环中,这里有一个介绍有向仙人掌的文档:http://files.cnblogs.com/ambition/cactu ...

  6. SPRING IN ACTION 第4版笔记-第四章Aspect-oriented Spring-001-什么是AOP

    一. Aspect就是把会在应用中的不同地方重复出现的非业务功能的模块化,比如日志.事务.安全.缓存 In software development, functions that span mult ...

  7. Django Aggregation聚合

    在当今根据需求而不断调整而成的应用程序中,通常不仅需要能依常规的字段,如字母顺序或创建日期,来对项目进行排序,还需要按其他某种动态数据对项目进行排序.Djngo聚合就能满足这些要求. 以下面的Mode ...

  8. JavaScript中的自调用函数

    自调用函数 自调用函数(self-invoking funciton)就是函数定义完之后会立即运行的函数. 最常见的写法是: (function() { // function body... }() ...

  9. char*,const char*和string的相互转换

    好久没写东西啦,发表学术文章一篇,hiahia~ 近日和小佳子编程时遇到很多转换问题,很麻烦,在网上查了很多资料. 为了以后查找方便,特此总结如下. 如果有不对的地方或者有更简单的方法,请指出~~ 1 ...

  10. Layout Resource官方教程(2)用ViewStub引用的嵌入的layout可推迟加载

    Loading Views On Demand THIS LESSON TEACHES YOU TO Define a ViewStub Load the ViewStub Layout YOU SH ...