【POJ2135】Farm Tour
时间:2021-07-29
本文章向大家介绍【POJ2135】Farm Tour,主要包括【POJ2135】Farm Tour使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
题目
解析:
把题意换一下,就是从\(1—>n\)的所有路径中找两个没有没有公共边的路径使得长度之和最小。
没有公共边\(<=>\)流量为\(1\)
长度最小\(<=>\)费用为边长
两条路径\(<=>s,t\)流量为2
跑费用流,最小费用即为答案
code:
#include <iostream>
#include <algorithm>
#include <cstdio>
#include <queue>
using namespace std;
const int Maxn=2005;
const int Maxm=50005;
const int inf=1e9;
int n,m,size=-1,s,t,sum;
int first[Maxn],dis[Maxn],vis[Maxn],tmp[Maxn];
struct shu{int to,next,l,c;}e[Maxm<<1];
inline int get_int()
{
int x=0,f=1;char c;
for(c=getchar();(!isdigit(c))&&(c!='-');c=getchar());
if(c=='-') f=-1,c=getchar();
for(;isdigit(c);c=getchar()) x=(x<<3)+(x<<1)+c-'0';
return x*f;
}
inline void build(int x,int y,int l,int c)
{
e[++size].next=first[x],first[x]=size,e[size].to=y,e[size].l=l,e[size].c=c;
}
inline void init()
{
n=get_int(),m=get_int(),t=2*n+1;
for(int i=s;i<=t;i++) first[i]=-1;
for(int i=1;i<=m;i++)
{
int x=get_int(),y=get_int(),z=get_int();
build(x,y,1,z),build(y,x,0,-z);
build(y,x+n,1,z),build(x+n,y,0,-z);
build(x+n,x,1,0),build(x,x+n,0,0);
}
build(s,1,2,0),build(1,s,0,0);
build(n,t,2,0),build(t,n,0,0);
}
inline bool spfa()
{
queue<int>q;
for(int i=s;i<=t;i++) tmp[i]=first[i],dis[i]=inf;
dis[s]=0,q.push(s),vis[s]=1;
while(q.size())
{
int p=q.front();q.pop(),vis[p]=0;
for(int u=first[p];~u;u=e[u].next)
{
int to=e[u].to,c=e[u].c,l=e[u].l;
if(!l || dis[to]<=dis[p]+c) continue;
dis[to]=dis[p]+c;
if(!vis[to]) q.push(to),vis[to]=1;
}
}
return dis[t]!=inf;
}
inline int dfs(int p,int flow)
{
if(p==t) return flow;
int s=0;vis[p]=1;
for(int &u=tmp[p];~u;u=e[u].next)
{
int to=e[u].to,c=e[u].c,l=e[u].l;
if(!l || dis[to]!=dis[p]+c || vis[to]) continue;
int f=dfs(to,min(flow-sum,l));
e[u].l-=f,e[u^1].l+=f,sum+=f*c,s+=f;
if(s==flow) break;
}
vis[p]=0;
return s;
}
inline void solve()
{
while(spfa())
{while(dfs(s,inf));}
cout<<sum;
}
int main()
{
init();
solve();
return 0;
}
原文地址:https://www.cnblogs.com/Tarjan-Zeng/p/15076116.html
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- php-fpm超时时间设置request_terminate_timeout资源问题分析
- laravel框架添加数据,显示数据,返回成功值的方法
- PHP的静态方法与普通方法用法实例分析
- 解决PHP使用CURL发送GET请求时传递参数的问题
- php弹出提示框的是实例写法
- laravel 时间格式转时间戳的例子
- php新建文件的方法实例
- 解决PHP curl或file_get_contents下载图片损坏或无法打开的问题
- PHP迭代器和生成器用法实例分析
- php中关于换行的实例写法
- laravel 获取当前url的别名方法
- php中文语义分析实现方法示例
- laravel 中某一字段自增、自减的例子
- php统计数组不同元素的个数的实例方法
- PHP实现单条sql执行多个数据的insert语句方法