博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
POJ2135:Farm Tour——题解
阅读量:6698 次
发布时间:2019-06-25

本文共 1221 字,大约阅读时间需要 4 分钟。

题目大意:

从1到n再回来,每条边只能走一次,问最短路。

——————————————————

如果不告诉我是费用流打死不会想这个……

我们把问题简化为1到n跑两遍,然后每条边容量为1,费用为长度。

然后建一个s和t,s到1容量为2,n到t容量为2.

跑费用流。

(注意,本题是双向边~!)

#include
#include
#include
#include
#include
#include
using namespace std;typedef long long ll;const int INF=1e9;const int maxn=1010;inline int read(){ int X=0,w=0;char ch=0; while(!isdigit(ch)){w|=ch=='-';ch=getchar();} while(isdigit(ch))X=(X<<3)+(X<<1)+(ch^48),ch=getchar(); return w?-X:X;}struct node{ int nxt; int to; int w; int b;}edge[50010];int head[maxn],cnt=-1;void add(int u,int v,int w,int b){ cnt++; edge[cnt].to=v; edge[cnt].w=w; edge[cnt].b=b; edge[cnt].nxt=head[u]; head[u]=cnt; return;}int dis[maxn];bool vis[maxn];inline bool spfa(int s,int t,int n){ deque
q; memset(vis,0,sizeof(vis)); for(int i=1;i<=n;i++)dis[i]=INF; dis[t]=0;q.push_back(t);vis[t]=1; while(!q.empty()){ int u=q.front(); q.pop_front();vis[u]=0; for(int i=head[u];i!=-1;i=edge[i].nxt){ int v=edge[i].to; int b=edge[i].b; if(edge[i^1].w&&dis[v]>dis[u]-b){ dis[v]=dis[u]-b; if(!vis[v]){ vis[v]=1; if(!q.empty()&&dis[v]

 

转载于:https://www.cnblogs.com/luyouqi233/p/7944254.html

你可能感兴趣的文章
python简单爬虫(一)
查看>>
直接拿来用!最火的Android开源项目(完结篇)
查看>>
将centos7打造成桌面系统
查看>>
IDEA15 下运行Scala遇到问题以及解决办法
查看>>
Redis 安装
查看>>
什么是H标签?H1,H2,H3标签?以及和strong标签使用的方法及重要性
查看>>
centos 7 /etc/rc.local 开机不执行的问题
查看>>
mysql 5.6 binlog组提交
查看>>
header的安全配置指南
查看>>
HttpClient通过Post上传文件(转)
查看>>
基于Redis、Storm的实时数据查询实践
查看>>
YModem协议
查看>>
C#与C/C++的交互zz
查看>>
Delphi -- Compiler helper for initializing/finalizing variable
查看>>
在Visual Studio上开发Node.js程序(2)——远程调试及发布到Azure
查看>>
三大UML建模工具Visio、Rational Rose、PowerDesign的区别
查看>>
【JAVA】StringTokenizer 迭代方式对字符串进行分割
查看>>
js判断用户的浏览设备是移动设备还是PC
查看>>
jquery easyui DataGrid 数据表格 属性
查看>>
干将莫邪
查看>>