poj1273
来源:互联网 发布:solidworks软件画足球 编辑:程序博客网 时间:2024/05/18 02:20
这是一道网络流模板题,我却10次没有A掉,其中包括2个MLE,3个RE,2个CE。今天真的不适宜敲代码。
说点感想:好累!今天晚上本是集训的时间,又是回宿舍了,洗了洗衣服。白天写了两篇论文,说是论文,也就是受力分析了一下,列了个微分方程,做了个拉普拉斯变换,用simulink仿真了一下,用Matlab画了画频响图和波特图,分析了下曲线。没什么创新性可言,这种论文肯定发出去没人要,有人要也是这个杂志社缺稿子了。。另外一篇是帮啸爷找了找资料,让他在比赛前先别让这些事情烦心。明天又是满满一天的课,很难熬。电路十四周考试,还两周,恐怕这两周又没法安下心来敲代码了,原谅我。
鼓励自己的话:要想比别人好,就得比别人努力的多。
说多了,这个题目的代码主体部分是抄的别人的,mark一下,现在安不下心来学这个算法,过了也不是自己的东西,又有何用?!
美其名曰借鉴,实则抄袭,这样怎么能做好?!
请看到这篇文章的读者自行搜索解题报告吧,这里提供一下抄袭的代码:
#include <iostream>
#include <queue>
#include <vector>
#include <string.h>
#define MAXN 205
#define oo 0x3f3f3f3f
using namespace std;
struct edge { int to, cap, rev; };
vector <edge> G[MAXN];
int level[MAXN];//顶点到源点的距离编号
int iter[MAXN];//当前弧,在其之前的边不用再考虑
void add_edge(int from, int to, int cap)
{
edge from_edge, to_edge;
from_edge = { to, cap, G[to].size() };
to_edge = { from, 0, G[from].size() - 1 };
G[from].push_back(from_edge);
G[to].push_back(to_edge);
}
//bfs用来计算从源点出发所有点的距离编号
void bfs(int s) {
memset(level, -1, sizeof(level));
queue<int> que;
level[s] = 0;
que.push(s);
while (!que.empty()) {
int v = que.front(); que.pop();
for (int i = 0; i < G[v].size(); i++) {
edge &e = G[v][i];
if (e.cap > 0 && level[e.to] < 0) {
level[e.to] = level[v] + 1;
que.push(e.to);
}
}
}
}
//通过DFS寻找当前的最短的增广路
int dfs(int v, int t, int f) {
if (v == t) return f;
for (int &i = iter[v]; i < G[v].size(); i++) {//这里用引用,巧妙地修改了iter数组
edge &e = G[v][i];
if (e.cap > 0 && level[v] < level[e.to]) {//level[v] < level[e.to]这个条件保证了当前的增广路是最短的
int d = dfs(e.to, t, min(f, e.cap));
if (d > 0) {
e.cap -= d;
G[e.to][e.rev].cap += d;
return d;
}
}
}
return 0;
}
int max_flow(int s, int t) {
int flow = 0;
for (;;) {
bfs(s);
if (level[t] < 0) return flow;
memset(iter, 0, sizeof(iter));
int f;
while ((f = dfs(s, t, oo)) > 0) {
flow += f;
}
}
}
void init()
{
for(int i = 0; i < MAXN; i++)
{
G[i].clear();
}
}
int main()
{
int n, m;
while (cin >> n >> m)
{
init();
for (int i = 0; i < n; i++)
{
int a, b, c;
cin >> a >> b >> c;
add_edge(a, b, c);
}
cout << max_flow(1, m) << endl;
}
}
#include <queue>
#include <vector>
#include <string.h>
#define MAXN 205
#define oo 0x3f3f3f3f
using namespace std;
struct edge { int to, cap, rev; };
vector <edge> G[MAXN];
int level[MAXN];//顶点到源点的距离编号
int iter[MAXN];//当前弧,在其之前的边不用再考虑
void add_edge(int from, int to, int cap)
{
edge from_edge, to_edge;
from_edge = { to, cap, G[to].size() };
to_edge = { from, 0, G[from].size() - 1 };
G[from].push_back(from_edge);
G[to].push_back(to_edge);
}
//bfs用来计算从源点出发所有点的距离编号
void bfs(int s) {
memset(level, -1, sizeof(level));
queue<int> que;
level[s] = 0;
que.push(s);
while (!que.empty()) {
int v = que.front(); que.pop();
for (int i = 0; i < G[v].size(); i++) {
edge &e = G[v][i];
if (e.cap > 0 && level[e.to] < 0) {
level[e.to] = level[v] + 1;
que.push(e.to);
}
}
}
}
//通过DFS寻找当前的最短的增广路
int dfs(int v, int t, int f) {
if (v == t) return f;
for (int &i = iter[v]; i < G[v].size(); i++) {//这里用引用,巧妙地修改了iter数组
edge &e = G[v][i];
if (e.cap > 0 && level[v] < level[e.to]) {//level[v] < level[e.to]这个条件保证了当前的增广路是最短的
int d = dfs(e.to, t, min(f, e.cap));
if (d > 0) {
e.cap -= d;
G[e.to][e.rev].cap += d;
return d;
}
}
}
return 0;
}
int max_flow(int s, int t) {
int flow = 0;
for (;;) {
bfs(s);
if (level[t] < 0) return flow;
memset(iter, 0, sizeof(iter));
int f;
while ((f = dfs(s, t, oo)) > 0) {
flow += f;
}
}
}
void init()
{
for(int i = 0; i < MAXN; i++)
{
G[i].clear();
}
}
int main()
{
int n, m;
while (cin >> n >> m)
{
init();
for (int i = 0; i < n; i++)
{
int a, b, c;
cin >> a >> b >> c;
add_edge(a, b, c);
}
cout << max_flow(1, m) << endl;
}
}
- poj1273
- poj1273
- poj1273
- poj1273
- poj1273
- poj1273
- poj1273
- poj1273
- poj1273
- poj1273
- poj1273
- POJ1273
- poj1273
- POJ1273
- poj1273 EK
- POJ1273 Drainage Ditches
- POJ1273(最大流)
- poj1273 Drainage Ditches
- MySQL:索引工作原理
- Android异步加载解决方案
- ocp 10g考试环境模拟器
- ProductModel.class.php
- 命令模式lua实现
- poj1273
- Hadoop2.2.0版本多节点集群安装及测试
- ARM架构kprobe应用及实现分析(9.0 arch_prepare_kprobe平台相关注册)
- Product_catModel.class.php
- CPPUnit用法简介
- SelfformModel.class.php
- 【javaweb源码】JSP+Servlet+MySQL实现注册功能
- About Maze Problem
- matlab简易画板