bzoj 1927 网络流
首先我们可以知道这道题中每个点只能经过一次,那么我们引入附加源汇source,sink,那么我们可以将每个点拆成两个点,分别表示对于图中这个节点我们的进和出,那么我们可以连接(source,i,1,0),(i+n,sink,1,0),然后对于可以直接到达的点我们可以连接(source,i+n,1,cost)这个代表我们可以从任意一个点到达这个点,对于星球之间的连边我们可以连接(x,y+n,1,cost),代表我们可以从这个星球到另一个星球,因为我们考虑每个点只经过一次,所以可以这样构图,我们并不关心路径的具体方案,只关心这个点会被进一次,出一次。
/**************************************************************
Problem: 1927
User: BLADEVIL
Language: C++
Result: Accepted
Time:2388 ms
Memory:1540 kb
****************************************************************/
//By BLADEVIL
#include <cstdio>
#include <algorithm>
#include <cstring>
#define maxn 2010
#define maxm 40010
using namespace std;
int n,m,l,source,sink,ans;
int last[maxn],pre[maxm],other[maxm],len[maxm],cost[maxm];
int d[maxn],que[maxn*],vis[maxn],father[maxn];
void connect(int a,int b,int c,int d)
{
pre[++l]=last[a];
last[a]=l;
other[l]=b;
len[l]=c;
cost[l]=d;
//if (c) printf("|%d %d %d\n",a,b,d);
}
bool spfa()
{
memset(d,0x3f,sizeof d);
int h=,t=,cur;
que[]=source; d[source]=;
while (h<t)
{
cur=que[++h];
vis[cur]=;
for (int q=last[cur];q;q=pre[q])
{
if (!len[q]) continue;
if (d[other[q]]>d[cur]+cost[q])
{
father[other[q]]=q;
d[other[q]]=d[cur]+cost[q];
if (!vis[other[q]])
{
que[++t]=other[q];
vis[other[q]]=;
}
}
}
}
return d[]!=d[sink];
}
void update()
{
int cur=sink,low=<<;
while (cur!=source)
{
low=min(low,len[father[cur]]);
cur=other[father[cur]^];
}
cur=sink;
while (cur!=source)
{
ans+=cost[father[cur]];
len[father[cur]]-=low;
len[father[cur]^]+=low;
cur=other[father[cur]^];
}
//printf("%d\n",ans);
}
int main() {
scanf("%d%d",&n,&m);
source=(n<<)+; sink=source++; l=;
for (int i=;i<=n;i++) {
int x;
scanf("%d",&x);
connect(source,i+n,,x); connect(i+n,source,,-x);
}
for (int i=;i<=n;i++) connect(source,i,,),connect(i,source,,);
for (int i=;i<=m;i++) {
int x,y,z;
scanf("%d%d%d",&x,&y,&z);
if (x>y) swap(x,y);
connect(x,y+n,,z); connect(y+n,x,,-z);
}
for (int i=;i<=n;i++) connect(i+n,sink,,),connect(sink,i+n,,);
while (spfa()) update();
printf("%d\n",ans);
return ;
}
bzoj 1927 网络流的更多相关文章
- Bzoj 1927: [Sdoi2010]星际竞速(网络流)
1927: [Sdoi2010]星际竞速 Time Limit: 20 Sec Memory Limit: 259 MB Description 10年一度的银河系赛车大赛又要开始了.作为全银河最盛大 ...
- bzoj 1927 [Sdoi2010]星际竞速——网络流
题目:https://www.lydsy.com/JudgeOnline/problem.php?id=1927 每个点拆点保证只经过一次. 主要是如果经过了这个点,这个点应该向汇点流过去表示经过了它 ...
- BZOJ 1927: [Sdoi2010]星际竞速
1927: [Sdoi2010]星际竞速 Time Limit: 20 Sec Memory Limit: 259 MBSubmit: 2051 Solved: 1263[Submit][Stat ...
- BZOJ 1927 星际竞速(最小费用最大流)
题目链接:http://61.187.179.132/JudgeOnline/problem.php?id=1927 题意:一个图,n个点.对于给出的每条边 u,v,w,表示u和v中编号小的那个到编号 ...
- BZOJ 1927: [Sdoi2010]星际竞速 费用流
1927: [Sdoi2010]星际竞速 Time Limit: 1 Sec Memory Limit: 256 MB 题目连接 http://www.lydsy.com/JudgeOnline/pr ...
- bzoj 1927 [Sdoi2010]星际竞速(最小费用最大流)
1927: [Sdoi2010]星际竞速 Time Limit: 20 Sec Memory Limit: 259 MBSubmit: 1576 Solved: 954[Submit][Statu ...
- BZOJ 1927 星际竞速
http://www.lydsy.com/JudgeOnline/problem.php?id=1927 思路:把一个点拆成两个点, S->i 费用0,流量1 (代表这个点可以移动到其他点所必备 ...
- BZOJ 1927: [Sdoi2010]星际竞速(最小费用最大流)
拆点,费用流... ----------------------------------------------------------------------------- #include< ...
- BZOJ 1927: [Sdoi2010]星际竞速 [上下界费用流]
1927: [Sdoi2010]星际竞速 题意:一个带权DAG,每个点恰好经过一次,每个点有曲速移动到他的代价,求最小花费 不动脑子直接上上下界费用流过了... s到点连边边权为曲速的代价,一个曲速移 ...
随机推荐
- Linux内核策略介绍学习笔记
主要内容 硬件 策略 CPU 进程调度.系统调用.中断 内存 内存管理 外存 文件IO 网络 协议栈 其他 时间管理 进程调度 内核的运行时间 系统启动.中断发生.系统调用以及内核线程. 进程和线程的 ...
- iframe 随内容自适应高度
兼容性好的 html代码: <iframe src="enterprise/enter_edit.aspx" id="mainframe" framebo ...
- 【Docker 命令】- build命令
docker build 命令用于使用 Dockerfile 创建镜像. 语法 docker build [OPTIONS] PATH | URL | - OPTIONS说明: --build-arg ...
- C跟C++
工作以来几乎就只写C,下周开始的新工作可能就要开始写C++啦~ C: C++: 1.template 2.多态.重载.继承 3.虚函数 C++内存布局 看两张耗子的图片就清楚了.其中虚函数表一般放在数 ...
- django设置首页
1.在views中添加一个def 为homepage basepath=os.getcwd()+'\\dockerApp\\app\\templates\\';def homepage(request ...
- 【bzoj4832】[Lydsy2017年4月月赛]抵制克苏恩 概率期望dp
题目描述 你分别有a.b.c个血量为1.2.3的奴隶主,假设英雄血量无限,问:如果对面下出一个K点攻击力的克苏恩,你的英雄期望会受到到多少伤害. 输入 输入包含多局游戏. 第一行包含一个整数 T (T ...
- CentOS 输入输出重定向
标准输入重定向(STDIN,文件描述符为 0):默认从键盘输入,也可从其他文件或命令中输入.(文件描述符可以省略) 标准输出重定向(STDOUT,文件描述符为 1):默认输出到屏幕.(文件描述符可以省 ...
- BZOJ1856:[SCOI2010]字符串——题解
https://www.lydsy.com/JudgeOnline/problem.php?id=1856 lxhgww最近接到了一个生成字符串的任务,任务需要他把n个1和m个0组成字符串,但是任务还 ...
- BZOJ2242:[SDOI2011]计算器——题解
https://www.lydsy.com/JudgeOnline/problem.php?id=2242 https://www.luogu.org/problemnew/show/P2485 你被 ...
- HDU.1285 确定比赛名次 (拓扑排序 TopSort)
HDU.1285 确定比赛名次 (拓扑排序 TopSort) 题意分析 裸的拓扑排序 详解请移步 算法学习 拓扑排序(TopSort) 只不过这道的额外要求是,输出字典序最小的那组解.那么解决方案就是 ...