【CodeChef】PARADE(费用流,最短路)
题意:

思路:





#include<cstdio>
#include<iostream>
#include<algorithm>
#include<cstring>
typedef long long ll;
using namespace std;
#define N 310000
#define oo 1000000000 bool inq[N];
ll s[N];
int f[][],head[N],vet[N],len1[N],len2[N],nxt[N],dis[N],q[N],a[N],
pre[N][],fan[N],n,tot,cnt,source,src,num; void add(int a,int b,int c,int d)
{
nxt[++tot]=head[a];
vet[tot]=b;
len1[tot]=c;
len2[tot]=d;
head[a]=tot; nxt[++tot]=head[b];
vet[tot]=a;
len1[tot]=;
len2[tot]=-d;
head[b]=tot;
} bool spfa()
{
for(int i=;i<=cnt;i++)
{
dis[i]=oo;
inq[i]=false;
}
int t=; int w=;
q[]=source; dis[source]=; inq[source]=true;
while(t<w)
{
t++; int u=q[t%(cnt+)]; inq[u]=false;
int e=head[u];
while(e)
{
int v=vet[e];
if(len1[e]&&dis[u]+len2[e]<dis[v])
{
dis[v]=dis[u]+len2[e];
pre[v][]=u;
pre[v][]=e;
if(!inq[v])
{
w++; q[w%(cnt+)]=v; inq[v]=true;
}
}
e=nxt[e];
}
} if(dis[src]==oo) return false;
a[++num]=dis[src];
return true;
} void mcf()
{
int k=src;
int t=oo;
while(k!=source)
{
int e=pre[k][];
t=min(t,len1[e]);
k=pre[k][];
}
k=src;
while(k!=source)
{
int e=pre[k][];
len1[e]-=t;
len1[fan[e]]+=t;
k=pre[k][];
} } int main()
{
//freopen("parade.in","r",stdin);
//freopen("parade.out","w",stdout);
for(int i=;i<=N;i++)
if(i&) fan[i]=i+;
else fan[i]=i-;
int m,Q;
scanf("%d%d%d",&n,&m,&Q);
for(int i=;i<=n;i++)
for(int j=;j<=n;j++) f[i][j]=oo;
for(int i=;i<=n;i++) f[i][i]=;
source=n+n+; src=source+; cnt=src;
memset(head,,sizeof(head));
tot=;
for(int i=;i<=n;i++)
{
add(source,i,,);
add(i+n,src,,);
}
for(int i=;i<=m;i++)
{
int x,y,z;
scanf("%d%d%d",&x,&y,&z);
f[x][y]=min(f[x][y],z);
}
for(int i=;i<=n;i++)
for(int j=;j<=n;j++)
for(int k=;k<=n;k++) f[j][k]=min(f[j][k],f[j][i]+f[i][k]); for(int i=;i<=n;i++)
for(int j=;j<=n;j++)
if(i!=j&&f[i][j]<=) add(i,j+n,,f[i][j]);
num=;
while(spfa()) mcf();
s[]=;
num=min(num,n);
for(int i=;i<=num;i++)
{
//printf("%d ",a[i]);
s[i]=s[i-]+a[i];
}
printf("\n");
for(int i=;i<=Q;i++)
{
ll x;
scanf("%lld",&x);
int l=;
int r=num;
int last=;
while(l<=r)
{
int mid=(l+r)>>;
if(a[mid]<x){last=mid; l=mid+;}
else r=mid-;
}
ll ans=x*(n-last)+s[last];
printf("%lld\n",ans);
}
return ;
}
【CodeChef】PARADE(费用流,最短路)的更多相关文章
- Mining Station on the Sea HDU - 2448(费用流 || 最短路 && hc)
Mining Station on the Sea Time Limit: 5000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Jav ...
- 最短路&生成树&二分图匹配&费用流问题
最短路 题意理解,建图 https://vjudge.net/problem/UVALive-4128 飞机票+行程建图 https://vjudge.net/problem/UVALive-3561 ...
- 【bzoj2324】[ZJOI2011]营救皮卡丘 最短路-Floyd+有上下界费用流
原文地址:http://www.cnblogs.com/GXZlegend/p/6832504.html 题目描述 皮卡丘被火箭队用邪恶的计谋抢走了!这三个坏家伙还给小智留下了赤果果的挑衅!为了皮卡丘 ...
- POJ 2135 Farm Tour && HDU 2686 Matrix && HDU 3376 Matrix Again 费用流求来回最短路
累了就要写题解,近期总是被虐到没脾气. 来回最短路问题貌似也能够用DP来搞.只是拿费用流还是非常方便的. 能够转化成求满流为2 的最小花费.一般做法为拆点,对于 i 拆为2*i 和 2*i+1.然后连 ...
- POJ2135 来回最短路(简单费用流)
题意: 就是从1走到n然后再走回来,一条边只能走一次,要求路径最短. 思路: 比较水,可以直接一遍费用流,不解释了,具体的看看代码,敲这个题就是为了练 练手,好久不敲了,怕比赛 ...
- HDU4807 Lunch Time(费用流变种)
题目 Source http://acm.hdu.edu.cn/showproblem.php?pid=4807 Description The campus of Nanjing Universit ...
- 学习了ZKW费用流
所谓ZKW费用流,其实就是Dinic. 若干年前有一个人发明了最小增广路算法,每次用BFS找一条增广路,时间O(nm^2) 然后被DinicD飞了:我们为什么不可以在长度不变时多路增广呢?时间O(n^ ...
- 【进阶——最小费用最大流】hdu 1533 Going Home (费用流)Pacific Northwest 2004
题意: 给一个n*m的矩阵,其中由k个人和k个房子,给每个人匹配一个不同的房子,要求所有人走过的曼哈顿距离之和最短. 输入: 多组输入数据. 每组输入数据第一行是两个整型n, m,表示矩阵的长和宽. ...
- hdu3315-My Brute(费用流 or KM算法)
题目:My Brute Seaco是一个漂亮的妹子,喜欢玩一款名叫My Brute的游戏.情人节快到了,starvae和xingxing都想邀请妹子过节,但是妹子只能陪一个啊,于是两个人决定打一架,用 ...
- UVA 10806 Dijkstra, Dijkstra.(费用流)
n个点的无向带权图,求1->n的最短往返路径,不走重复边. 这里涉及到一个知识点:求无向图上s->t的最短路,其实就是费用流. 而求1->n最短往返路径呢?增加源点s,由s到1加弧, ...
随机推荐
- LeetCode951-翻转等价二叉树
问题:翻转等价二叉树 我们可以为二叉树 T 定义一个翻转操作,如下所示:选择任意节点,然后交换它的左子树和右子树. 只要经过一定次数的翻转操作后,能使 X 等于 Y,我们就称二叉树 X 翻转等价于二叉 ...
- 5-2 os模块
导入os模块 import os res = os.listdir('D:\study') # 列出某个目录下的所有文件 os.remove('newuser.json') # 删除某个目录下的某个文 ...
- JZOJ 2137. 【GDKOI2004】城市统计 (Standard IO)
2137. [GDKOI2004]城市统计 (Standard IO) Time Limits: 1000 ms Memory Limits: 128000 KB Detailed Limits ...
- Java开发学生管理系统
Java 学生管理系统 使用JDBC了链接本地MySQL 数据库,因此在没有建立好数据库的情况下没法成功运行 (数据库部分, Java界面部分, JDBC部分) 资源下载: http://downlo ...
- nable to execute dex: Multiple dex files define Lcom/chinaCEB/cebActivity/R
用proguaid 只混淆Android项目的src下的包的话,如果出现了上面的问题: nable to execute dex: Multiple dex files define Lcom/chi ...
- mysql插入、修改、删除
联合查询: union:合并.联合,将多次查询结果合并成一个结果 语法: 查询语句1: union[all] 查询语句2: union [all] ... 意义 1.将一条比较复杂的查询语句可拆分成多 ...
- datagrid的修改和删除功能的实现
1.修改 双击,进入一行的编辑状态的功能的实现 2.删除 3.扩展easyui的datagrid,添加动态增加或删除Editor的方法 (1)背景要求: 对于某一列,比如密码,动态增加时候,是可以编辑 ...
- navicat常用快捷键及注意事项
常用快捷键: 1. ctrl + q: 打开新查询窗口 2. ctrl + r: 运行当前窗口内的所有语句 3. ctrl + w: 关闭当前窗口 4. F6: 打开一个mysql命令行窗口 ---- ...
- 设计模式之第3章-模板方法模式(Java实现)
设计模式之第3章-模板方法模式(Java实现) "那个,上次由于我老婆要给我做饭,所以就没有说完就走掉了...这个那个".这次和以前一样,先来开场福利(工厂方法模式已被作者踹下场) ...
- Visual Studio 在 C# 项目添加动态链接库 dll
DLL(Dynamic Link Library)文件为动态链接库文件,又称“应用程序拓展”,是软件文件类型. 使用DLL文件的好处是程序不需要在运行之初加载所有代码,只有在程序需要某个函数的时候才从 ...